新しい Place Search に移行する

欧州経済領域(EEA)のデベロッパー

このページでは、Place クラス(新規)と PlacesService(以前のバージョン)のテキストベースのプレイス検索機能の違いについて説明し、比較用のコード スニペットをいくつか紹介します。

以前の PlacesService には、次のテキストベースの検索メソッドがあります。

  • テキスト クエリを受け取り、単一の場所の結果を返す findPlaceFromQuery() メソッド。場所データ フィールドの使用をサポートしています。
  • findPlaceFromPhoneNumber() メソッド。電話番号を使用して場所を検索でき、場所データ フィールドの使用をサポートします。
  • テキスト クエリを受け取り、場所の結果のリストを返す textSearch() メソッド。textSearch() は古い形式で、プレイス データ フィールドの使用をサポートしていません。

新しい Place クラスは Place.searchByText() メソッドを提供します。このメソッドを使用すると、テキストクエリまたは電話番号で場所を検索できます。また、定期的に更新される場所データ フィールドと場所のタイプの選択肢を拡大して、検索をカスタマイズすることもできます。

次の表に、Place クラスと PlacesService の場所検索メソッドの主な違いをいくつか示します。

PlacesService(以前の方法) Place(新規)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
クエリ オプションが制限されています。 より広範なクエリ オプション。
結果オブジェクトと google.maps.places.PlacesServiceStatus レスポンスを処理するためにコールバックを使用する必要があります。 Promise を使用し、非同期で動作します。
PlacesServiceStatus チェックが必要です。 ステータス チェックは不要で、標準のエラー処理を使用できます。詳細
位置情報のバイアスのみをサポートします。 位置情報のバイアスと位置情報の制限をサポートします。
プレイス データ フィールドはスネークケースでフォーマットされます。 プレイス データ フィールドは、キャメルケースでフォーマットされます。
単一のプレイス結果を返します。 最大 20 件の場所の結果を返します。
場所のタイプと場所のデータ フィールドの固定セットに限定されます。 定期的に更新される場所のタイプと場所のデータ フィールドの選択肢が拡大されます。
textSearch()
searchByText()
利用可能なすべてのデータ フィールド(サポートされるフィールドの一部)を返します。特定のフィールドに制限することはできません。 リクエストされたプレイスデータ フィールドのみを返します。

コードの比較

このセクションでは、テキスト検索メソッドのコードを比較して、Places Service と Place クラスの違いを説明します。コード スニペットは、テキストベースの検索リクエストを行うために各 API で必要なコードを示しています。

プレイス サービス(従来版)

次のコード スニペットは、findPlaceFromQuery() メソッドを使用して場所を検索する方法を示しています。リクエストは同期で、PlacesServiceStatus の条件付きチェックが含まれます。必要なプレイス データ フィールドは、実際のリクエストを行う前に定義されるリクエストの本文で指定します。

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

詳細

テキスト検索(新版)

次のコード スニペットは、searchByText() メソッドを使用して場所を検索する方法を示しています。リクエストは非同期で、ステータス チェックは必要ありません(標準のエラー処理を使用できます)。この例では、リクエストに 8 の maxResultCount が含まれています(値は 1 ~ 20 の範囲で指定する必要があります)。この関数は、結果をループ処理し、それぞれにマーカーを追加して、マーカーの位置に基づいて地図の境界を調整します。searchByText() メソッドは await 演算子を使用するため、async 関数内でのみ使用できます。

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

searchByText() メソッドは、以前のバージョンと比較して、次のようなリクエスト オプションを多数サポートしています。

  • includedType: 検索対象を特定の場所のタイプに制限できます。
  • isOpenNow: 検索を制限して、営業中の場所のみを返すことができます。
  • minRating: 指定した制限を下回る結果を除外できます(たとえば、3 つ星以上の場所のみを返します)。
  • locationRestriction(指定した場所以外の結果を除外します。locationBias もサポートされています)。

詳細