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 são exibidos por padrão no mapa quando o tipo dele é 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 relevância nacional ou histórica.
Detectar eventos de clique em PDIs
Se você quiser responder a um clique em um PDI, implemente
GMSMapViewDelegate
e o método
mapView(_:didTapPOIWithPlaceID:name:location:),
conforme o 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 options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) 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]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; 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 outra interface do usuário quando alguém toca em um ponto de interesse). O exemplo a seguir mostra como usar um marcador para exibir uma janela de informações de um PDIs:
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. static 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 que os PDIs sejam exibidos no mapa
Para ocultar PDIs, aplique estilos personalizados a todos os PDIs ou a categorias específicas deles.
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.