Umgekehrte Geocodierung eines Standorts

Wenn Sie lange auf die Karte drücken, werden die Koordinaten der Geste an den Dienst für die umgekehrte Geocodierung gesendet. Wenn der Vorgang erfolgreich war, wird der Karte eine Markierung mit einem Infofenster mit dem Ergebnis hinzugefügt.

Jetzt starten

Bevor Sie den Beispielcode ausprobieren können, müssen Sie Ihre Entwicklungsumgebung konfigurieren. Weitere Informationen finden Sie unter Maps SDK for iOS – Beispielcode.

Code ansehen

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
      

Vollständige Beispielanwendung lokal ausführen

Die Beispielanwendung für das Maps SDK for iOS ist als Downloadarchiv auf GitHub verfügbar. So installieren und testen Sie die Beispiel-App für das Maps SDK for iOS:

  1. Führen Sie git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git aus, um das Beispiel-Repository in ein lokales Verzeichnis zu klonen.
  2. Öffnen Sie ein Terminalfenster, rufen Sie das Verzeichnis auf, in das Sie die Beispieldateien geklont haben, und wechseln Sie zum Verzeichnis „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. Klicken Sie in Xcode auf die Schaltfläche „Kompilieren“, um die App mit dem aktuellen Schema zu erstellen. Beim Build wird ein Fehler ausgegeben, der Sie auffordert, Ihren API-Schlüssel in die Datei SDKConstants.swift für Swift oder SDKDemoAPIKey.h für Objective-C einzugeben.
  4. Wenn Sie noch keinen API-Schlüssel haben, folgen Sie dieser Anleitung, um ein Projekt in der Google Cloud Console einzurichten und einen API-Schlüssel zu erhalten. Wenn Sie den Schlüssel in der Cloud Console konfigurieren, können Sie ihn auf die Bundle-ID der Beispiel-App beschränken, damit nur Ihre App ihn verwenden kann. Die Standard-Bundle-ID der SDK-Beispielanwendung ist com.example.GoogleMapsDemos.
  5. Bearbeite die SDKConstants.swift-Datei für Swift oder die SDKDemoAPIKey.h-Datei für Objective-C und füge deinen API-Schlüssel in die Definition der Konstante apiKey oder kAPIKey ein. Beispiel:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. Entfernen Sie in der Datei SDKConstants.swift (Swift) oder SDKDemoAPIKey.h (Objective-C) die folgende Zeile, da sie zum Registrieren des benutzerdefinierten Problems verwendet wird:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  7. Erstellen Sie das Projekt und führen Sie es aus. Das Fenster des iOS-Simulators wird angezeigt. Es enthält eine Liste der Maps SDK-Demos.
  8. Wählen Sie eine der angezeigten Optionen aus, um eine Funktion des Maps SDK for iOS zu testen.
  9. Wenn Sie aufgefordert werden, GoogleMapsDemos Zugriff auf Ihren Standort zu gewähren, wählen Sie Zulassen aus.