Place Search では、テキストのクエリに対して場所のセットを返すテキスト検索(新版)が導入されています。
テキスト検索(新版)
テキスト検索(新版)は、「渋谷 ピザショップ」「表参道 靴店」「123 番地」といった文字列に対して、場所のセットについての情報を返します。テキスト文字列と、その時点で設定済みの地域バイアスをもとに、場所のリストを返すサービスです。テキスト検索(新版)では、場所のタイプ別の検索、営業時間や評価といった条件を使った絞り込み、特定の地域に限定または優先(バイアス)した検索が可能です。テキスト検索(新版)はまったく新しい機能として構築されており、従来の Places API 群よりも優れたパフォーマンスとデータ品質を提供します。
前提条件
テキスト検索(新版)を利用するには、ご使用の Google Cloud プロジェクトで「Places API(新版)」を有効化する必要があります。詳しくは始めるをご覧ください。
テキスト検索の特長
テキスト検索(新版)には次のような改良点が盛り込まれています。
- 検索フィルタが拡充され、多数の新しい場所タイプに対応したほか、評価の下限による抽出もできるようになりました。
- フィールドのマスキングに対応しました。
- プレイス フィールドに評価とクチコミが含まれるようになりました。
テキストのクエリで場所を見つける
searchByText
を呼び出すと、テキストによるクエリまたは電話番号に対して、場所のリストが返されます。クエリに電話番号が含まれる場合、地域(region)パラメータをリクエスト元ドメインと同じ地域に設定しましょう。たとえば日本にある場所を電話番号で検索する場合、リクエストを行うドメインが jp
であれば、region
パラメータも「jp」に設定する必要があります。リクエストの region
が省略されていると、API はデフォルトで地域を米国(「us」)に設定します。
データ フィールドの指定(複数可)には fields
パラメータを使用します。キャメルケース表記のカンマ区切りリストとして指定しましょう。
テキストクエリで場所を検索するため searchByText
を呼び出すコードは、次の例のようになります。
TypeScript
let map; let center; async function initMap() { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; center = {lat: 37.4161493, lng: -122.0812166}; map = new Map(document.getElementById('map') as HTMLElement, { center: center, zoom: 14, // ... }); findPlaces(); } async function findPlaces() { const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary; //@ts-ignore const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const request = { textQuery: 'Tacos in Mountain View', fields: ['displayName', 'location', 'businessStatus'], includedType: 'restaurant', isOpenNow: true, language: 'en-US', maxResultCount: 7, minRating: 3.2, region: 'us', useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request); if (places.length) { console.log(places); const { LatLngBounds } = await google.maps.importLibrary("core") as google.maps.CoreLibrary; const bounds = new LatLngBounds(); // Loop through and get all the results. places.forEach((place) => { const markerView = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, }); bounds.extend(place.location); console.log(place); }); map.setCenter(bounds.getCenter()); } else { console.log('No results'); } } initMap();
JavaScript
let map; let center; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); center = { lat: 37.4161493, lng: -122.0812166 }; map = new Map(document.getElementById("map"), { center: center, zoom: 14, // ... }); findPlaces(); } async function findPlaces() { const { Place } = await google.maps.importLibrary("places"); //@ts-ignore const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); const request = { textQuery: "Tacos in Mountain View", fields: ["displayName", "location", "businessStatus"], includedType: "restaurant", isOpenNow: true, language: "en-US", maxResultCount: 7, minRating: 3.2, region: "us", useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request); if (places.length) { console.log(places); const { LatLngBounds } = await google.maps.importLibrary("core"); const bounds = new LatLngBounds(); // Loop through and get all the results. places.forEach((place) => { const markerView = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, }); bounds.extend(place.location); console.log(place); }); map.setCenter(bounds.getCenter()); } else { console.log("No results"); } } initMap();