Place Details

Places SDK for iOS 為應用程式提供豐富的資訊 地點的相關資訊,包括地點的名稱和地址、 指定經緯度座標的位置,以及地點類型 (例如 例如夜店、寵物店、博物館等如要存取這項資訊 特定地點時,您可以使用地點 ID,這是能明確定義 識別地點。

地點詳細資訊

GMSPlace敬上 類別可提供特定地點的相關資訊。您可以取得 GMSPlace敬上 物件

,瞭解如何調查及移除這項存取權。

要求地點時,您必須指定要做為地點資料類型的地點資料類型 傳回。如要這麼做,請傳遞 GMSPlaceField,並指定 要傳回的類型。這是非常重要的考量,因為這會影響 每次請求的費用

由於地點資料結果不能空白,因此只能放置 系統會傳回含有資料的結果 (例如,如果要求的地點沒有 相片,則結果中不會顯示 photos 欄位)。

以下範例會傳送兩個欄位值的清單 指定要求傳回的資料:

Swift

      // A hotel in Saigon with an attribution.
      let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

      // Specify the place data types to return.
      let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
      UInt(GMSPlaceField.placeID.rawValue))
  

Objective-C

      // A hotel in Saigon with an attribution.
      NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

      // Specify the place data types to return.
      GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
  

進一步瞭解地點欄位。如要進一步瞭解地點資料要求的計費方式,請參閱「用量與計費」一文。

GMSPlace敬上 類別可包含以下地點資料:

  • name - 地點的名稱。
  • editorialSummary - 提供地點的簡單說明。
  • placeID:地點的文字 ID。已讀 進一步瞭解本頁其餘部分。
  • coordinate - 地點的地理位置。 以經緯度座標表示。
  • phoneNumber - 地點的電話號碼,位於 國際電話號碼格式
  • formattedAddress:這個人類可讀的地址 或 HTTP/HTTPS 位置

    這個地址通常等於郵寄地址。請注意,由於授權上的限制,部分國家/地區 (例如英國) 不允許散布真實的郵寄地址。

    理論上,格式化地址是由一或多個「地址元件」組成。舉例來說,「111 8th Avenue, New York, NY」這個地址包含以下元件:「111」(門牌號碼)、「8th Avenue」(路名)、「New York」(城市) 和「NY」(美國州名)。

    請勿以程式輔助方式剖析格式化地址。建議您改用個別地址元件,API 回應除了包含格式化地址欄位之外,也會包含這些元件。

  • openingHours - 地點的營業時間 (例如 由 GMSOpeningHours 表示)。致電 GMSOpeningHours.weekdayText 可取得本地化字串清單 當日每日營業時間。致電「GMSOpeningHours.Periods」 傳回包含更多詳細資訊的 GMSPeriod 清單 等於 weekdayText 提供的資料。 注意:如果地點隨時營業,時間範圍會以下列格式表示: 星期日午夜,closeEvent 為空值。
  • currentOpeningHourssecondaryOpeningHours – 適用於特定地點的假日和臨時變更的欄位。
  • addressComponents - 陣列的陣列 GMSAddressComponent 物件代表 特定地點的地址這些元件旨在 擷取地點資訊的結構化資訊,例如 找到地點所在的城市請勿使用這些元件 地址格式;請改用 formattedAddress 屬性,藉此提供本地化格式的地址。

    addressComponents」的注意事項 陣列:

    • 地址元件陣列包含的元件可能比 formattedAddress
    • 此陣列不一定會包含 包含地址,除了不包含 formattedAddress
    • 回應的格式無法保證各 要求。尤其是 addressComponents 的數量 視要求的地址而定, 相同的位址。元件在陣列中的位置可能會變更, 元件類型也可能會變更。特定元件可以是 遺漏的內容
  • userRatingsTotal - 代表評論的涵蓋數量 地點的評分。

GMSPlace敬上 類別包含下列成員函式:

  • isOpen 會計算地點在指定時間是否營業。 根據 openingHoursUTCOffsetMinutes, 以及目前的日期和時間
  • isOpenAtDate敬上 根據 openingHours。 和 UTCOffsetMinutes, 以及目前的日期和時間
  • 如果您使用這類函式查詢開幕時間和/或日期, fetchPlaceFromPlaceID:findPlaceLikelihoodsFromUserLocationWithPlaceFields: 要求必須指定 GMSPlaceFieldOpeningHoursGMSPlaceFieldUTCOffsetMinutes 只要使用來自這些領域的 小型資料集訓練即可如果缺少任何一個欄位,產生的 GMSPlace 物件不含開幕時間或日期,而呼叫會傳回 GMSPlaceOpenStatusUnknown。為確保結果準確無誤,請提出 GMSPlaceFieldBusinessStatusGMSPlaceFieldUTCOffsetMinutes 欄位。如果沒有要求,我們會假設 而且業務營運中

    歡迎觀看這部影片,瞭解使用方式。 包含 Place Details 的 isOpen

查看特殊營業時間

一般營業時間是透過 openingHourscurrentOpeningHourssecondaryOpeningHours 取得,但假日和暫時性的時間表可變更。 我們可以篩選並顯示這些特殊日子的特殊營業時間 (如有)。

Swift

    func examineOpeningHours(place: GMSPlace) {

      // Check if the current opening hours contains a special day that has exceptional hours
      guard let currentOpeningHours = place.currentOpeningHours else { return }
      if let specialDays = currentOpeningHours.specialDays {
        guard !specialDays.isEmpty else { return }
        if let specialDay = specialDays.filter { $0.isExceptional }.first  {
          // Indicate exceptional hours
        }
      }

      // Check if current opening hours contains a truncated time period
      let periods = currentOpeningHours.periods

      if !periods.isEmpty {
        for period in periods {
          let open = period.open
          let close = period.close

          if let open = open {
            let date = open.date

            if open.isTruncated {
              // Indicate truncated time period
            }
          }
        }
      }

      // Check if the place's secondary opening hours indicate when delivery is available
      let secondaryOpeningHours = place.secondaryOpeningHours
      guard let hoursType = secondaryOpeningHours.first?.hoursType else {
      return
      }

      if (hoursType == GMSPlaceHoursTypeDelivery) {
        // Indicate hours where delivery is available
      }
  }

Objective-C

- (void)examineOpeningHours:(GMSPlace *) place {

    // Check if the current opening hours contains a special day that has exceptional hours
    GMSOpeningHours *currentOpeningHours = place.currentOpeningHours;
    if (currentOpeningHours != nil) {
      NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays;
      if ([specialDays count] != 0) {
        for (GMSPlaceSpecialDay *specialDay in specialDays) {
          NSDate *date = specialDay.date;
          if ([specialDay isExceptional]) {
            // Indicate exceptional hours
          }
        }
      }
    }

    // Check if current opening hours contains a truncated time period
    NSArray <GMSPeriod *> * periods = currentOpeningHours.periods;

    if ([periods count] != 0) {
      for (GMSPeriod * period in periods) {
        GMSTimeOfWeek *open = period.open;
        GMSTimeOfWeek *close = period.close;

        if (open) {
          if ([open isTruncated]) {
            // Indicate truncated time period
          }
        }
      }
    }

    // Check if the place's secondary opening hours indicate when delivery is available
    GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours;
    GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType;

    if (hoursType == GMSPlaceHoursTypeDelivery) {
      // Indicate hours where delivery is available
    }
}

透過 ID 取得地點

地點 ID 是用來識別特定地點的文字 ID,於 Places SDK for iOS 可從 GMSPlace敬上 物件。您可以儲存地點 ID,並使用它來擷取 GMSPlace敬上 物件。

如要依 ID 取得地點,請呼叫 GMSPlacesClient fetchPlaceFromPlaceID:,並傳遞下列參數:

  • 包含地點 ID 的字串。
  • 一或多個 GMSPlaceField,指定要傳回的資料類型。
  • 為完成自動完成查詢而發出呼叫時的工作階段符記。 否則,請傳遞 nil。
  • 處理結果的 GMSPlaceResultCallback

API 會叫用指定的回呼方法,並傳入 GMSPlace敬上 物件。如果找不到地點,則地點物件為「nil」。

Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
  UInt(GMSPlaceField.placeID.rawValue))!

placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: {
  (place: GMSPlace?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }
  if let place = place {
    self.lblName?.text = place.name
    print("The selected place is: \(place.name)")
  }
})

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);

[_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (place != nil) {
    NSLog(@"The selected place is: %@", [place name]);
  }
}];

在應用程式中顯示作者資訊

應用程式顯示 GMSPlacesClient lookUpPlaceID:callback:,應用程式也必須顯示作者資訊。 詳情請參閱 作者資訊

進一步瞭解地點 ID

Places SDK for iOS 中使用的地點 ID 與 用於 Places API、Places SDK for Android 和其他 Google API

每個地點 ID 只能代表一個地點,但一個地點可以有多個地點 多個地點 ID

在某些情況下,地點可能會取得新的地點 ID。 舉例來說,如果商家搬遷到新地點,可能就會發生這種情形。

指定地點 ID 來要求地點時, 您會在回覆中收到相同位置 (如果地點仍存在 存在)。不過請注意,回應中可能包含地點 ID, 與要求中的編號不同

詳情請參閱 地點 ID 總覽