Place Search 導入了 Text Search (新版),可進行文字查詢並傳回一組地點。
Text Search (新版)
Text Search (新版) 可根據字串 (例如「台南魯肉飯」、「西門町附近的鞋店」或「中正路 123 號」),傳回一組地點的相關資訊。這項服務會傳回與文字字串及位置自訂調整設定相符的地點清單。您可以運用 Text Search (新版) 按照類型搜尋地點、使用營業時間和評分等條件進行篩選,以及將結果的範圍限制或自訂調整為特定地點。Text Search (新版) 是全新開發的服務,提供比舊版 Places API 更出色的效能和資料品質。
必備條件
如要使用 Text Search (新版),請務必在 Google Cloud 專案中啟用「Places API (新版)」。詳情請參閱「開始使用」一文。
Text Search 重點說明
Text Search (新版) 的改善功能如下:
- 新增搜尋篩選條件,提供多種新的地點類型,且可依照最低評分進行篩選。
- 現已支援欄位遮蓋功能。
- 地點欄位現已納入評分和評論。
透過文字查詢尋找多個地點
呼叫 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();