反向地理編碼位置

長按地圖時,手勢的座標會傳送至反向地理編碼服務。如果成功,地圖會加入標記,其中包含含有結果的資訊視窗。

開始使用

請務必先設定開發環境,再試用程式碼範例。詳情請參閱 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
      

在本機執行完整的範例應用程式

您可以從 GitHub 下載封存檔,取得 Maps SDK for iOS 範例應用程式。請按照下列步驟安裝及試用 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. 如果您還沒有 API 金鑰,請按照操作說明在 Google Cloud 控制台中設定專案並取得 API 金鑰。在 Cloud 控制台中設定金鑰時,您可以限制金鑰,只允許範例應用程式的軟體包 ID 使用金鑰,確保只有您的應用程式可以使用金鑰。SDK 範例應用程式的預設套件 ID 為 com.example.GoogleMapsDemos
  5. 編輯 Swift 或 SDKDemoAPIKey.h 檔案的 SDKConstants.swift 檔案,用於 Objective-C,然後將 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 存取您的位置,請選擇「允許」