对位置进行反向地理编码

欧洲经济区 (EEA) 开发者

  当用户长按地图时,手势的坐标会发送到反向地理编码服务。如果成功,系统会在地图中添加一个包含结果的信息窗口标记。

开始使用

您必须先配置开发环境,然后才能试用该示例代码。如需了解详情,请参阅 Maps SDK for iOS 代码示例

查看代码

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       

在本地运行完整示例应用

Maps SDK for iOS 示例应用可从 GitHub 下载为下载归档文件。按照以下步骤安装并试用 Maps SDK for iOS 示例应用。

  1. 运行 git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git,将示例代码库克隆到本地目录中。
  2. 打开终端窗口,导航到克隆示例文件的目录,然后深入到 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. 在 Xcode 中,按编译按钮以使用当前方案构建应用。构建会产生错误,提示您在 SDKConstants.swift 文件(适用于 Swift)或 SDKDemoAPIKey.h 文件(适用于 Objective-C)中输入 API 密钥。
  4. 已启用 Maps SDK for iOS 的项目中获取 API 密钥
  5. 修改 Swift 的 SDKConstants.swift 文件或 Objective-C 的 SDKDemoAPIKey.h 文件,然后将您的 API 密钥粘贴到 apiKeykAPIKey 常量的定义中。例如:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. SDKConstants.swift 文件 (Swift) 或 SDKDemoAPIKey.h 文件 (Objective-C) 中,移除以下行,因为该行用于注册用户定义的问题:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  7. 构建并运行项目。系统会显示 iOS 模拟器窗口,其中包含 Maps SDK 演示的列表。
  8. 选择显示的选项之一,以试用 Maps SDK for iOS 的某项功能。
  9. 如果系统提示您允许 GoogleMapsDemos 访问您的位置信息,请选择允许