Place Search

Place 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();