iOS 向け Places SDK は、場所の名前や住所、緯度/経度座標で指定された地理的位置、場所の種類(ナイトクラブ、ペットショップ、美術館など)など、場所に関する豊富な情報をアプリに提供します。特定の場所に関するこの情報にアクセスするには、プレイス ID を使用します。プレイス ID は、場所を一意に識別する安定した ID です。
場所の詳細
GMSPlace
クラスは、特定の場所に関する情報を提供します。GMSPlace
オブジェクトは、次の方法で取得できます。
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
を呼び出します。現在の場所を取得する方法のガイドをご覧ください。GMSPlaceField
、場所 ID、コールバック メソッドを渡してGMSPlacesClient fetchPlaceFromPlaceID:
を呼び出します。Place Details リクエストでフィールドを指定しない場合、またはリクエストのfields
パラメータを省略した場合は、利用可能なフィールドがすべて返され、それに応じた料金が請求されます。ID で場所を取得するためのガイドをご覧ください。
場所をリクエストする際は、返す場所データの種類を指定する必要があります。これを行うには、返すデータの種類を指定して GMSPlaceField
を渡します。これは、リクエストごとの費用に影響するため、重要な考慮事項です。
プレイスデータの結果は空にできないため、データを含むプレイスの結果のみが返されます(たとえば、リクエストされたプレイスに写真がない場合、結果に photos
フィールドは含まれません)。
次の例では、2 つのフィールド値のリストを渡して、リクエストから返されるデータを指定します。
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。プレイス ID について詳しくは、このページの残りの部分をご覧ください。coordinate
- 緯度と経度の座標で指定された場所の地理的位置。phoneNumber
- 場所の電話番号(国際電話形式)。formattedAddress
- この場所の住所(人が読める形式)。ほとんどの場合、この住所は「郵便の宛先」と同一です。イギリスなど一部の国では、ライセンス上の制限があるため実際の郵便の宛先は配信できません。
フォーマット済み住所は、論理的には 1 つ以上の住所コンポーネントで構成されます。たとえば、「111 8th Avenue, New York, NY」という住所は、「111」(番地)、「8th Avenue」(道路名)、「New York」(都市名)、「NY」(アメリカの州名)で構成されています。
フォーマット済み住所は、プログラムで解析しないでください。その代わりに、フォーマット済み住所のフィールドに加えて、API レスポンスに含まれる個々の住所コンポーネントを使用してください。
openingHours
- 場所の営業時間(GMSOpeningHours
で表されます)。GMSOpeningHours.weekdayText
を呼び出して、1 週間の毎日の営業時間のローカライズされた文字列のリストを取得します。GMSOpeningHours.Periods
を呼び出して、weekdayText
から提供されたデータと同等の詳細情報を含んだGMSPeriod
のリストを返します。注: 営業時間が常に同じ場合は、営業時間は日曜日の午前零時として表され、closeEvent
は null になります。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 を取得できます。プレイス ID を保存しておき、その ID を使って後で GMSPlace
オブジェクトを再度取得することも可能です。
ID でプレイスを取得するには、GMSPlacesClient
fetchPlaceFromPlaceID:
を呼び出して、次のパラメータを渡します。
- プレイス ID を含む文字列。
- 返すデータ型を指定する 1 つ以上の
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 が参照できるプレイスは 1 つだけですが、1 つのプレイスに複数のプレイス ID を割り当てることもできます。
場所に新しいプレイス ID が割り当てられる場合があります。たとえば、お店やサービスが新しい場所に移動するケースが考えられます。
場所 ID を指定して場所をリクエストすると、レスポンスで常に同じ場所が返されます(場所がまだ存在する場合)。ただし、レスポンスには、リクエストの場所 ID とは異なる場所 ID が含まれている場合があります。
詳しくは、プレイス ID の概要をご覧ください。