Place Details

プラットフォームを選択: Android iOS JavaScript ウェブサービス

iOS 向け Places SDK は、場所の名前や住所、緯度/経度座標で指定された地理的位置、場所の種類(ナイトクラブ、ペットショップ、美術館など)など、場所に関する豊富な情報をアプリに提供します。特定の場所に関するこの情報にアクセスするには、プレイス ID を使用します。プレイス ID は、場所を一意に識別する安定した ID です。

場所の詳細

GMSPlace クラスは、特定の場所に関する情報を提供します。GMSPlace オブジェクトは、次の方法で取得できます。

場所をリクエストする際は、返す場所データの種類を指定する必要があります。これを行うには、返すデータの種類を指定して 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 になります。
  • currentOpeningHourssecondaryOpeningHours - 場所の休日や一時的なスケジュール変更を指定できるフィールド。
  • addressComponents - 場所の住所のコンポーネントを表す GMSAddressComponent オブジェクトの配列。これらのコンポーネントは、場所の住所に関する構造化された情報を抽出することを目的としています。たとえば、場所が存在する市区町村を検索できます。住所のフォーマットにはこれらのコンポーネントを使用しないでください。代わりに、ローカライズされたフォーマット済み住所を提供する formattedAddress プロパティを使用してください。

    addressComponents 配列については、次の点に注意してください。

    • 住所コンポーネントの配列には、formattedAddress よりも多くのコンポーネントが含まれている場合があります。
    • この配列には、formattedAddress に含まれるものを除き、アドレスを含むすべての政治的エンティティが含まれているとは限りません。
    • レスポンスの形式は、リクエスト間で同じになるとは限りません。特に、addressComponents の数はリクエストされた住所によって異なり、同じ住所でも将来的に変わる可能性があります。コンポーネントは、配列内の位置が変わる場合があります。 コンポーネントのタイプは変わる場合があります。特定のコンポーネントが以降のレスポンスに含まれない場合があります。
  • userRatingsTotal - 場所の評価を構成するクチコミの数を表します。

GMSPlace クラスには、次のメンバー関数があります。

  • isOpen は、openingHoursUTCOffsetMinutes、および現在の日時に基づいて、指定された時刻に場所が営業しているかどうかを計算します。
  • isOpenAtDate は、openingHoursUTCOffsetMinutes、現在の日時に基づいて、特定の日付に場所が営業しているかどうかを計算します。
  • これらの関数を使用して営業時間や営業日を取得する場合は、元の fetchPlaceFromPlaceID: リクエストまたは findPlaceLikelihoodsFromUserLocationWithPlaceFields: リクエストで GMSPlaceFieldOpeningHours フィールドと GMSPlaceFieldUTCOffsetMinutes フィールドの両方を指定する必要があります。これらのフィールドのいずれかが欠落している場合、結果の GMSPlace オブジェクトには営業時間または日付が含まれず、呼び出しは GMSPlaceOpenStatusUnknown を返します。正確な結果を得るには、元の場所リクエストで GMSPlaceFieldBusinessStatus フィールドと GMSPlaceFieldUTCOffsetMinutes フィールドをリクエストします。リクエストされていない場合、ビジネスは稼働中であるとみなされます。

    場所の詳細で isOpen を使用する方法については、こちらの動画をご覧ください。

特別営業時間を取得する

通常の営業時間は openingHours で取得されますが、currentOpeningHourssecondaryOpeningHours は祝休日や一時的なスケジュール変更をサポートしています。これらの特別な日の例外的な営業時間は、利用可能な場合はフィルタして表示できます。

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 の概要をご覧ください。