Wyszukiwanie tekstu (nowość)

Wyszukiwanie tekstowe (Nowe) wykonuje zapytanie tekstowe i zwraca listę pasujących miejsc.

Wyszukiwanie tekstowe (nowe) zwraca informacje o zestawie miejsc na podstawie ciągu znaków, na przykład „pizza w Warszawie”, „sklepy obuwnicze w pobliżu Ottawy” lub „ul. Główna 123”. W odpowiedzi usługa przesyła listę miejsc pasujących do ciągu tekstowego i wszelkie ustawione uprzedzenia dotyczące lokalizacji. Wyszukiwanie tekstowe (nowość) pozwala wyszukiwać miejsca według typu, filtrować wyniki według takich kryteriów jak godziny otwarcia i ocena, a także ograniczać lub zawężać wyniki do określonej lokalizacji.

Aby używać wyszukiwania tekstowego (nowość), musisz włączyć interfejs „Places API (nowy)” w projekcie Google Cloud. Więcej informacji znajdziesz w artykule Pierwsze kroki.

Znajdowanie miejsc przy użyciu zapytania tekstowego

Wywołaj searchByText, aby otrzymać listę miejsc z zapytania tekstowego lub numeru telefonu. Określ parametry wyszukiwania za pomocą żądania, a następnie wywołaj funkcję searchByText. Wyniki są zwracane w postaci listy obiektów Place, z których możesz uzyskać szczegóły miejsca. Ten fragment kodu zawiera przykład żądania i wywołania searchByText:

TypeScript

const request = {
    textQuery: 'Tacos in Mountain View',
    fields: ['displayName', 'location', 'businessStatus'],
    includedType: 'restaurant',
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: 'en-US',
    maxResultCount: 8,
    minRating: 3.2,
    region: 'us',
    useStrictTypeFiltering: false,
};

//@ts-ignore
const { places } = await Place.searchByText(request);

JavaScript

const request = {
  textQuery: "Tacos in Mountain View",
  fields: ["displayName", "location", "businessStatus"],
  includedType: "restaurant",
  locationBias: { lat: 37.4161493, lng: -122.0812166 },
  isOpenNow: true,
  language: "en-US",
  maxResultCount: 8,
  minRating: 3.2,
  region: "us",
  useStrictTypeFiltering: false,
};
//@ts-ignore
const { places } = await Place.searchByText(request);
  • Podaj zapytanie tekstowe lub numer telefonu do wyszukania za pomocą parametru textQuery.
  • Użyj parametru fields (wymagany), aby podać oddzieloną przecinkami listę co najmniej jednego pola danych (w przypadku wielbłąda).
  • Używaj parametru includedType, aby zwracać tylko wyniki określonego typu.
  • Użyj właściwości locationBias lub locationRestriction, aby uprzedzić lub ograniczyć wyniki wyszukiwania tekstowego do określonego regionu.
Zobacz pełną listę usług.

Jeśli zapytanie zawiera numer telefonu, należy ustawić parametr „region”. Jeśli na przykład używasz numeru telefonu do wyszukiwania miejsca w Japonii, a domena, która wysłała prośbę, to jp, musisz ustawić parametr region na „jp”. Jeśli w żądaniu pominiesz region, interfejs API domyślnie ustawi region Stany Zjednoczone („us”).

Wyniki są zwracane w postaci listy obiektów Place, z których możesz uzyskać szczegóły miejsca.

Przykład

W poniższym przykładzie używamy searchByText do wyszukiwania restauracji z tacos w pobliżu Mountain View i wypełnia mapę znacznikami, by pokazać wyniki.

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: 11,
        mapId: 'DEMO_MAP_ID',
    });

    findPlaces();
}

async function findPlaces() {
    const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary;
    const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary;
    const request = {
        textQuery: 'Tacos in Mountain View',
        fields: ['displayName', 'location', 'businessStatus'],
        includedType: 'restaurant',
        locationBias: { lat: 37.4161493, lng: -122.0812166 },
        isOpenNow: true,
        language: 'en-US',
        maxResultCount: 8,
        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 as google.maps.LatLng);
            console.log(place);
        });

        map.fitBounds(bounds);

    } 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: 11,
    mapId: "DEMO_MAP_ID",
  });
  findPlaces();
}

async function findPlaces() {
  const { Place } = await google.maps.importLibrary("places");
  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
  const request = {
    textQuery: "Tacos in Mountain View",
    fields: ["displayName", "location", "businessStatus"],
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    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.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

initMap();

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>Text Search</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- prettier-ignore -->
    <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
        ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script>
  </body>
</html>

Zobacz próbkę