Eseguire la migrazione alla nuova ricerca di luoghi

Questa pagina spiega le differenze tra le funzionalità di ricerca di luoghi basate sul testo nella classe Place (nuova) e nella classe PlacesService (legacy) e fornisce alcuni snippet di codice per il confronto.

La versione precedente di PlacesService ha i seguenti metodi di ricerca basati sul testo:

  • Il metodo findPlaceFromQuery() che accetta una query di testo e restituisce un singolo risultato di luogo e supporta l'utilizzo dei campi di dati dei luoghi.
  • Il metodo findPlaceFromPhoneNumber() che ti consente di cercare un luogo utilizzando un numero di telefono e supporta l'utilizzo dei campi dei dati dei luoghi.
  • Il metodo textSearch() che accetta una query di testo e restituisce un elenco di risultati relativi ai luoghi. textSearch() è precedente e non supporta l'uso dei campi di dati dei luoghi.

La nuova classe Place offre il metodo Place.searchByText(), che consente di cercare luoghi utilizzando una query di testo o un numero di telefono e di personalizzare le ricerche utilizzando una selezione ampliata di tipi di luoghi e campi di dati dei luoghi aggiornati regolarmente.

La tabella seguente elenca alcune delle principali differenze nei metodi di ricerca dei luoghi tra la classe Place e PlacesService:

PlacesService (legacy) Place (novità)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Opzioni di query limitate. Opzioni di query più ampie.
Richiede l'utilizzo di un callback per gestire l'oggetto risultati e la risposta google.maps.places.PlacesServiceStatus. Utilizza le promesse e funziona in modo asincrono.
Richiede un controllo PlacesServiceStatus. Nessun controllo dello stato richiesto, è possibile utilizzare la gestione degli errori standard.
Supporta solo la distorsione dovuta alla posizione. Supporta la limitazione e il bias di geolocalizzazione.
I campi dei dati dei luoghi sono formattati utilizzando il nome in minuscolo con lettere iniziali maiuscole. I campi di dati dei luoghi sono formattati utilizzando il camel case.
Restituisce un singolo risultato relativo a un luogo. Restituisce fino a 20 risultati relativi a luoghi.
Limitato a un insieme fisso di tipi di luoghi e campi di dati sui luoghi. Offre una selezione ampliata di tipi di luoghi e campi di dati dei luoghi aggiornati regolarmente.
textSearch()
searchByText()
Restituisce tutti i campi di dati disponibili (un sottoinsieme dei campi supportati); non può essere vincolato a campi specifici. Restituisce solo i campi dei dati dei luoghi richiesti.

Confronto del codice

Questa sezione confronta il codice dei metodi di ricerca di testo per illustrare le differenze tra il servizio Places e la classe Place. Gli snippet di codice mostrano il codice richiesto su ogni rispettiva API per effettuare una richiesta di ricerca basata sul testo.

Servizio Luoghi (legacy)

Il seguente snippet di codice mostra l'utilizzo del metodo findPlaceFromQuery() per cercare un luogo. La richiesta è sincrona e include un controllo condizionale su PlacesServiceStatus. I campi dei dati dei luoghi necessari sono specificati nel corpo della richiesta, che viene definito prima di effettuare la richiesta effettiva.

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);
    }
  });
}

Scopri di più

Ricerca di testo (novità)

Il seguente snippet di codice mostra l'utilizzo del metodo searchByText() per cercare luoghi. La richiesta è asincrona e non richiede un controllo dello stato (è possibile utilizzare la gestione degli errori standard). In questo esempio, la richiesta include un valore maxResultCount pari a 8 (il valore deve essere compreso tra 1 e 20). Questa funzione esamina i risultati e aggiunge un indicatore per ciascuno, regolando i limiti della mappa in base alla posizione degli indicatori. Poiché il metodo searchByText() utilizza l'operatore await, può essere utilizzato solo all'interno di una funzione 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");
  }
}

Il metodo searchByText() supporta molte più opzioni di richiesta rispetto alla versione precedente, tra cui:

  • includedType che ti consente di limitare le ricerche a un tipo di luogo specifico.
  • isOpenNow, che ti consente di limitare le ricerche in modo da restituire solo i luoghi aperti.
  • minRating che ti consente di filtrare i risultati al di sotto del limite specificato (ad es. restituire solo i luoghi con almeno tre stelle).
  • locationRestriction, che omette i risultati al di fuori della località specificata (è supportato anche locationBias).

Scopri di più