Por padrão, os pontos de interesse (PDIs) aparecem no mapa de base com os respectivos ícones. Esses pontos incluem parques, escolas, edifícios governamentais e muito mais. Além disso, os PDIs de empresas aparecem por padrão no mapa quando o tipo de mapa é kGMSTypeNormal
. Eles representam empresas como lojas, restaurantes, hotéis e outros.
Um PDI corresponde a um ID de lugar, conforme definido no SDK do Places para iOS. Por exemplo, parques são pontos de interesse, mas fontes d'água geralmente não são, a menos que tenham significado nacional ou histórico.
Como detectar eventos de clique em PDIs
Se você quiser responder ao toque de um usuário em um PDI, implemente GMSMapViewDelegate
e implemente o método
mapView(_:didTapPOIWithPlaceID:name:location:)
, conforme mostrado no exemplo a seguir:
Swift
import GoogleMaps class POI: UIViewController, GMSMapViewDelegate { override func loadView() { let camera = GMSCameraPosition.camera( withLatitude: 47.603, longitude:-122.331, zoom:14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { print("You tapped \(name): \(placeID), \(location.latitude)/\(location.longitude)") } }
Objective-C
#import "POI.h" @import GoogleMaps; @interface POI () <GMSMapViewDelegate> @end @implementation POI - (void)loadView { GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.603 longitude:-122.331 zoom:14]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { NSLog(@"You tapped %@: %@, %f/%f", name, placeID, location.latitude, location.longitude); } @end
Mostrar detalhes em uma janela de informações
Os PDIs aparecem no mapa, mas não há interface padrão ao clicar (a API não exibe automaticamente uma janela de informações ou qualquer outra interface do usuário quando o usuário toca em um PDI). O exemplo a seguir mostra como usar um marcador para exibir uma janela de informações para um ponto de interesse:
Swift
// Declare GMSMarker instance at the class level. let infoMarker = GMSMarker() // Attach an info window to the POI using the GMSMarker. func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { infoMarker.snippet = placeID infoMarker.position = location infoMarker.title = name infoMarker.opacity = 0; infoMarker.infoWindowAnchor.y = 1 infoMarker.map = mapView mapView.selectedMarker = infoMarker }
Objective-C
// Declare a GMSMarker instance at the class level. GMSMarker *infoMarker; // Attach an info window to the POI using the GMSMarker. - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { infoMarker = [GMSMarker markerWithPosition:location]; infoMarker.snippet = placeID; infoMarker.title = name; infoMarker.opacity = 0; CGPoint pos = infoMarker.infoWindowAnchor; pos.y = 1; infoMarker.infoWindowAnchor = pos; infoMarker.map = mapView; mapView.selectedMarker = infoMarker; }
Impedir a exibição de PDIs no mapa
Para ocultar PDIs, aplique estilos personalizados a todos eles ou a categorias específicas.
A seguinte declaração de estilo JSON oculta todos os PDIs de empresas no mapa:
[
{
"featureType": "poi.business",
"stylers": [
{ "visibility": "off" }
]
}
]
Em outro exemplo, o JSON abaixo simplifica a exibição de todas as categorias de PDIs:
[
{
"featureType": "poi",
"stylers": [
{ "visibility": "simplified" }
]
}
]
Para mais detalhes, consulte o guia sobre como ocultar elementos do mapa com estilos.