新しい Place Search に移行する

このページでは、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() メソッドを使用して場所を検索する方法を示しています。リクエストは非同期であり、ステータス チェックは必要ありません(標準のエラー処理を使用できます)。この例では、リクエストに maxResultCount 8 が含まれています(値は 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 もサポートされています)。

その他の情報