目前位置 (舊版)

您可以使用 Places SDK for iOS,找出裝置目前所在的地點。也就是裝置目前回報的位置。地點包括當地商家、搜尋點和地理位置。

  1. 要求位置授權
  2. 用量限制
  3. 取得目前位置
  4. 在應用程式中顯示出處資訊

要求位置授權

如果應用程式使用 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:,則必須要求使用定位服務的權限。將 NSLocationWhenInUseUsageDescription 鍵新增至 Info.plist 檔案,定義字串,告知使用者您需要定位服務的原因。例如:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Show your location on the map</string>

如要在應用程式處於背景時呼叫 findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:,而不觸發確認對話方塊,請在呼叫前採取下列步驟:

  1. 將 NSLocationAlwaysUsageDescription 鍵新增至 Info.plist 檔案。
  2. 在呼叫方法之前,請先對 CLLocationManager 的任何例項呼叫 requestAlwaysAuthorization。

按照下列方式向 CLLocationManager 要求授權:

Swift

    locationManager.requestAlwaysAuthorization()
    

Objective-C

    [self.locationManager requestAlwaysAuthorization];
    

取得目前位置

如要找出裝置目前所在的當地商家或其他地點,請呼叫 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:。請加入下列參數:

  • 一或多個 GMSPlaceField,指定要傳回的資料類型。如果省略這個參數,系統會傳回「所有」可能的欄位,並據此向您收費。這僅適用於 Place Details 要求。
  • 處理結果的回呼方法。

欄位會與 Place Search 搜尋結果相對應,並分為三種計費類別:「基本版」、「Contact」和「Atmosphere」。「Basic」欄位以基本費率計費,不會產生額外費用。「Contact」和「Atmosphere」欄位會以較高的費率計費。如要進一步瞭解地點資料要求的計費方式,請參閱「用量與計費」一文。

API 會叫用指定的回呼方法,傳回 GMSPlaceLikelihood 物件陣列。

每個 GMSPlaceLikelihood 物件都代表一個地點。每個地點的結果都會指出該地點正確的可能性。值越高,表示該地點最符合的可能性越高。如果沒有與裝置位置對應的已知地點,緩衝區可能會是空的。

下列程式碼範例會擷取裝置最可能所在的地點清單,並記錄每個地點的名稱和可能性。

Swift

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
                                          UInt(GMSPlaceField.placeID.rawValue))!
placesClient?.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: fields, callback: {
  (placeLikelihoodList: Array<GMSPlaceLikelihood>?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }

  if let placeLikelihoodList = placeLikelihoodList {
    for likelihood in placeLikelihoodList {
      let place = likelihood.place
      print("Current Place name \(String(describing: place.name)) at likelihood \(likelihood.likelihood)")
      print("Current PlaceID \(String(describing: place.placeID))")
    }
  }
})

Objective-C

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
[_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:fields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (likelihoods != nil) {
    for (GMSPlaceLikelihood *likelihood in likelihoods) {
      GMSPlace *place = likelihood.place;
      NSLog(@"Current place name: %@", place.name);
      NSLog(@"Place ID: %@", place.placeID);
    }
  }
}];

可能性值的注意事項:

  • 可能性是指在單一要求傳回的地點清單中,該地點為最佳相符地點的相對機率。您無法比較不同要求之間的可能性。
  • 可能性值會介於 0 至 1.0 之間。
  • 在傳回的 GMSPlaceLikelihood 物件陣列中,可能性總和一律小於或等於 1.0。請注意,總和不一定是 1.0。

舉例來說,如果正確地點是地點 A 的可能性為 55%,地點 B 的可能性為 35%,則可能性陣列會有兩個成員:地點 A 的可能性為 0.55,地點 B 的可能性為 0.35。

在應用程式中顯示出處資訊

如果應用程式顯示從 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: 取得的資訊,也必須顯示出處資訊。進一步瞭解出處。