Geocodifica invertita una località

Quando la mappa viene premuta a lungo, le coordinate del gesto vengono inviate al servizio di geocodifica inversa. Se l'operazione è andata a buon fine, alla mappa viene aggiunto un indicatore con una finestra informativa contenente il risultato.

Inizia

Prima di poter provare il codice di esempio, devi configurare il tuo ambiente di sviluppo. Per ulteriori informazioni, consulta la sezione Esempi di codice di Maps SDK for iOS.

Visualizza il codice

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
      

Esegui l'app di esempio completa in locale

L'app di esempio Maps SDK for iOS è disponibile come archivio di download da GitHub. Segui questi passaggi per installare e provare l'app di esempio Maps SDK for iOS.

  1. Esegui git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git per clonare il repository di esempi in una directory locale.
  2. Apri una finestra del terminale, vai alla directory in cui hai clonato i file di esempio e visualizza in dettaglio la directory 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. In Xcode, premi il pulsante di compilazione per compilare l'app con lo schema corrente. La compilazione genera un errore che ti chiede di inserire la chiave API nel file SDKConstants.swift per Swift o nel file SDKDemoAPIKey.h per Objective-C.
  4. Se non hai ancora una chiave API, segui le istruzioni per configurare un progetto nella console Google Cloud e ottenere una chiave API. Quando configuri la chiave nella Console Cloud, puoi limitarla all'identificatore del bundle dell'app di esempio per assicurarti che solo la tua app possa utilizzarla. L'identificatore del bundle predefinito dell'app Samples dell'SDK è com.example.GoogleMapsDemos.
  5. Modifica il file SDKConstants.swift per Swift o il fileSDKDemoAPIKey.h per Objective-C e incolla la tua chiave API nella definizione della costante apiKey o kAPIKey. Ad esempio:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. Nel file SDKConstants.swift (Swift) oSDKDemoAPIKey.h (Objective-C), rimuovi la riga seguente, perché viene utilizzata per registrare il problema definito dall'utente:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  7. Compila ed esegui il progetto. Viene visualizzata la finestra del simulatore iOS, che mostra un elenco di demo di Maps SDK.
  8. Scegli una delle opzioni visualizzate per provare una funzionalità di Maps SDK for iOS.
  9. Se ti viene chiesto di consentire a GoogleMapsDemos di accedere alla tua posizione, scegli Consenti.