新しい Place Search に移行する

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

このページでは、Place クラス(新版)と PlacesService(従来版)のテキストベースの場所検索機能の違いについて説明し、比較用のコード スニペットをいくつか紹介します。

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

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

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

次の表に、Place クラスと PlacesService の Place Search 方法の主な違いを示します。

PlacesService(レガシー) Place(新規)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
クエリ オプションが制限されている。 より広範なクエリ オプション。
結果オブジェクトと google.maps.places.PlacesServiceStatus レスポンスを処理するには、コールバックを使用する必要があります。 Promise を使用し、非同期で動作します。
PlacesServiceStatus のチェックが必要です。 必要なステータス チェックはありません。標準のエラー処理を使用できます。 詳細
位置情報のバイアスのみをサポートします。 位置情報のバイアスと位置情報の制限をサポートしています。
Place データ フィールドは、スネークケースを使用してフォーマットされます。 プレイスデータ フィールドは、キャメルケースを使用してフォーマットされます。
1 つの場所の結果を返します。 最大 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 もサポートされています)。

詳細