新しい Place Search に移行する

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

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

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

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

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

次の表に、Place クラスと PlacesService の Place Search メソッドの主な違いを示します 。

PlacesService (従来版) Place (新版)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
クエリ オプションが限られています。 クエリ オプションが豊富です。
結果オブジェクトと google.maps.places.PlacesServiceStatus レスポンスを処理するには、コールバックを使用する必要があります。 Promise を使用し、非同期で動作します。
PlacesServiceStatus チェックが必要です。 ステータス チェックは不要で、標準のエラー処理を使用できます。 詳細
ロケーション バイアスのみをサポートします。 ロケーション バイアスとロケーション制限をサポートします。
場所データ フィールドはスネークケースでフォーマットされます。 場所データ フィールドはキャメルケースでフォーマットされます。
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() メソッドを使用して場所を検索する方法を示しています。リクエストは非同期で、ステータス チェックは不要です(標準のエラー処理を使用できます)。この例では、リクエストに 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 もサポートされています)。

詳細