Empresas e outros pontos interesse

Selecione a plataforma: Android iOS JavaScript

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 é 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 coisas como fontes de água geralmente não são PDIs (a menos que sejam importância nacional ou histórica).

Como detectar eventos de clique em PDIs

Se você quiser responder a um toque do usuário em um PDI, implemente GMSMapViewDelegate e as mapView(_:didTapPOIWithPlaceID:name:location:) , como 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

É possível ocultar os pontos de interesse aplicando estilos personalizados a todos eles ou a categorias específicas de PDIs.

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.