Places SDK for iOS 為應用程式提供豐富的資訊 地點的相關資訊,包括地點的名稱和地址、 指定經緯度座標的位置,以及地點類型 (例如 例如夜店、寵物店、博物館等如要存取這項資訊 特定地點時,您可以使用地點 ID,這是能明確定義 識別地點。
地點詳細資訊
GMSPlace
敬上
類別可提供特定地點的相關資訊。您可以取得
GMSPlace
敬上
物件
- 致電
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
。請參閱以下指南: 取得目前地點。 - 致電
GMSPlacesClient fetchPlaceFromPlaceID:
,傳遞GMSPlaceField
、 地點 ID 及回呼方法。對於 Place Details 要求,如果沒有 請指定至少一個要求欄位,或者如果省略fields
參數,系統會傳回「所有」可能的欄位, 將據此收費請參閱這份指南 地點 (依 ID 排序)。
要求地點時,您必須指定要做為地點資料類型的地點資料類型
傳回。如要這麼做,請傳遞 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
為空值。currentOpeningHours
和secondaryOpeningHours
– 適用於特定地點的假日和臨時變更的欄位。addressComponents
- 陣列的陣列GMSAddressComponent
物件代表 特定地點的地址這些元件旨在 擷取地點資訊的結構化資訊,例如 找到地點所在的城市請勿使用這些元件 地址格式;請改用formattedAddress
屬性,藉此提供本地化格式的地址。「
addressComponents
」的注意事項 陣列:- 地址元件陣列包含的元件可能比
formattedAddress
。 - 此陣列不一定會包含
包含地址,除了不包含
formattedAddress
。 - 回應的格式無法保證各
要求。尤其是
addressComponents
的數量 視要求的地址而定, 相同的位址。元件在陣列中的位置可能會變更, 元件類型也可能會變更。特定元件可以是 遺漏的內容
- 地址元件陣列包含的元件可能比
userRatingsTotal
- 代表評論的涵蓋數量 地點的評分。
GMSPlace
敬上
類別包含下列成員函式:
-
isOpen
會計算地點在指定時間是否營業。 根據openingHours
和UTCOffsetMinutes
, 以及目前的日期和時間 isOpenAtDate
敬上 根據openingHours
。 和UTCOffsetMinutes
, 以及目前的日期和時間
如果您使用這類函式查詢開幕時間和/或日期,
fetchPlaceFromPlaceID:
或 findPlaceLikelihoodsFromUserLocationWithPlaceFields:
要求必須指定 GMSPlaceFieldOpeningHours
和 GMSPlaceFieldUTCOffsetMinutes
只要使用來自這些領域的
小型資料集訓練即可如果缺少任何一個欄位,產生的 GMSPlace
物件不含開幕時間或日期,而呼叫會傳回
GMSPlaceOpenStatusUnknown
。為確保結果準確無誤,請提出
GMSPlaceFieldBusinessStatus
和GMSPlaceFieldUTCOffsetMinutes
欄位。如果沒有要求,我們會假設
而且業務營運中
isOpen
。
查看特殊營業時間
一般營業時間是透過openingHours
、currentOpeningHours
和 secondaryOpeningHours
取得,但假日和暫時性的時間表可變更。
我們可以篩選並顯示這些特殊日子的特殊營業時間 (如有)。
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 總覽。