Eseguire la migrazione alla nuova ricerca di luoghi

Sviluppatori dello Spazio economico europeo (SEE)

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

Il PlacesService legacy dispone dei seguenti metodi di ricerca basati su 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 consente di cercare un luogo utilizzando un numero di telefono e supporta l'utilizzo dei campi di dati dei luoghi.
  • Il metodo textSearch(), che accetta una query di testo e restituisce un elenco di risultati di luoghi. textSearch() è precedente e non supporta l'utilizzo dei campi di dati sui 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 più ampia di campi di dati dei luoghi e tipi di luoghi aggiornati regolarmente.

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

PlacesService (legacy) Place (nuovo)
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. Ulteriori informazioni.
Supporta solo la distorsione della località. Supporta la distorsione della località e la limitazione della località.
I campi di dati del luogo sono formattati utilizzando la notazione snake case. I campi di dati del luogo sono formattati utilizzando la notazione camel case.
Restituisce un singolo risultato di luogo. Restituisce fino a 20 risultati di luoghi.
Limitato a un insieme fisso di tipi di luoghi e campi di dati sui luoghi. Fornisce una selezione più ampia 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 di dati del luogo richiesti.

Confronto del codice

Questa sezione confronta il codice per i 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 API rispettiva per effettuare una richiesta di ricerca basata su testo.

Servizio Places (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 di dati del luogo 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 testuale (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 maxResultCount di 8 (il valore deve essere compreso tra 1 e 20). Questa funzione scorre i risultati e aggiunge un indicatore per ciascuno, modificando 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 specifico di luogo.
  • isOpenNow che 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 esempio, restituire solo i luoghi con tre stelle o più).
  • locationRestriction che omette i risultati al di fuori della località specificata (è supportato anche locationBias).

Scopri di più