Geocodificar um local de forma inversa

Desenvolvedores do Espaço Econômico Europeu (EEE)

  Quando o mapa é pressionado por muito tempo, as coordenadas do gesto são enviadas ao serviço de geocodificação inversa. Se a operação for bem-sucedida, um marcador com uma janela de informações que contém o resultado será adicionado ao mapa.

Primeiros passos

Antes de testar o exemplo de código, é necessário configurar o ambiente de desenvolvimento. Para mais informações, consulte Exemplos de código do SDK do Maps para iOS.

Ver o código

Swift

import GoogleMaps
import UIKit

// Sample code for GeoCoder service.
class GeocoderViewController: UIViewController {

  private lazy var mapView: GMSMapView = {
    let camera = GMSCameraPosition(latitude: -33.868, longitude: 151.2086, zoom: 12)
    return GMSMapView(frame: .zero, camera: camera)
  }()

  private lazy var geocoder = GMSGeocoder()

  override func loadView() {
    view = mapView
    mapView.delegate = self
  }
}

extension GeocoderViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
    // On a long press, reverse geocode this location.
    geocoder.reverseGeocodeCoordinate(coordinate) { response, error in
      guard let address = response?.firstResult() else {
        let errorMessage = error.map { String(describing: $0) } ?? "<no error>"
        print(
          "Could not reverse geocode point (\(coordinate.latitude), \(coordinate.longitude)): \(errorMessage)"
        )
        return
      }
      print("Geocoder result: \(address)")
      let marker = GMSMarker(position: address.coordinate)
      marker.appearAnimation = .pop
      marker.map = mapView

      guard let lines = address.lines, let title = lines.first else { return }
      marker.title = title
      if lines.count > 1 {
        marker.snippet = lines[1]
      }
    }
  }
}
      

Objective-C

#import "GoogleMapsDemos/Samples/GeocoderViewController.h"

#import <GoogleMaps/GoogleMaps.h>

@implementation GeocoderViewController {
  GMSMapView *_mapView;
  GMSGeocoder *_geocoder;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                          longitude:151.2086
                                                               zoom:12];

  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  _mapView.delegate = self;

  _geocoder = [[GMSGeocoder alloc] init];

  self.view = _mapView;
}

- (void)mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate {
  // On a long press, reverse geocode this location.
  __weak __typeof__(self) weakSelf = self;
  GMSReverseGeocodeCallback handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {
    [weakSelf handleResponse:response coordinate:coordinate error:error];
  };
  [_geocoder reverseGeocodeCoordinate:coordinate completionHandler:handler];
}

- (void)handleResponse:(nullable GMSReverseGeocodeResponse *)response
            coordinate:(CLLocationCoordinate2D)coordinate
                 error:(nullable NSError *)error {
  GMSAddress *address = response.firstResult;
  if (address) {
    NSLog(@"Geocoder result: %@", address);

    GMSMarker *marker = [GMSMarker markerWithPosition:address.coordinate];
    NSArray<NSString *> *lines = [address lines];

    marker.title = [lines firstObject];
    if (lines.count > 1) {
      marker.snippet = [lines objectAtIndex:1];
    }

    marker.appearAnimation = kGMSMarkerAnimationPop;
    marker.map = _mapView;
  } else {
    NSLog(@"Could not reverse geocode point (%f,%f): %@", coordinate.latitude, coordinate.longitude,
          error);
  }
}

@end
      

Executar o app de exemplo completo localmente

O app de exemplo do SDK do Maps para iOS está disponível como um arquivo de download no GitHub. Siga estas etapas para instalar e testar o app de exemplo do SDK do Maps para iOS.

  1. Execute git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git para clonar o repositório de amostras em um diretório local.
  2. Abra uma janela de terminal, navegue até o diretório em que você clonou os arquivos de amostra e detalhe o diretório GoogleMaps:

    Swift

    cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
    pod install
    open GoogleMapsSwiftDemos.xcworkspace

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps
    pod install
    open GoogleMapsDemos.xcworkspace
  3. No Xcode, pressione o botão de compilação para criar o app com o esquema atual. O build produz um erro, pedindo que você insira sua chave de API no arquivo SDKConstants.swift para Swift ou no arquivo SDKDemoAPIKey.h para Objective-C.
  4. Gere uma chave de API do seu projeto com o SDK do Maps para iOS ativado.
  5. Edite o arquivo SDKConstants.swift para Swift ou o arquivo SDKDemoAPIKey.h para Objective-C e cole sua chave de API na definição da constante apiKey ou kAPIKey. Exemplo:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. No arquivo SDKConstants.swift (Swift) ou SDKDemoAPIKey.h (Objective-C), remova a seguinte linha, porque ela é usada para registrar o problema definido pelo usuário:

    Swift

    #error (Register for API Key and insert here. Then delete this line.)

    Objective-C

    #error Register for API Key and insert here.
  7. Compile e execute o projeto. A janela do simulador do iOS aparece, mostrando uma lista de demonstrações do SDK do Maps.
  8. Escolha uma das opções mostradas para testar um recurso do SDK do Maps para iOS.
  9. Se for preciso permitir que o GoogleMapsDemos acesse seu local, escolha Permitir.