Eseguire la migrazione alla nuova Ricerca nelle vicinanze

Questa pagina spiega le differenze tra la ricerca nelle vicinanze utilizzata nella classe Place (nuova) e la PlacesService (precedente) e fornisce alcuni snippet di codice per il confronto.

  • La versione precedente di PlacesService ha un metodo nearbySearch() che consente di cercare luoghi all'interno di un'area specifica per parola chiave o tipo.
  • La classe Place ha un metodo searchNearby() che ti consente di cercare luoghi all'interno di un'area specifica in base al tipo di luogo, utilizzando una selezione espansa di campi di dati e tipi di luoghi per una maggiore flessibilità.

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

PlacesService (legacy) Place (novità)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Richiede l'uso 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.
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. La classe Place offre una selezione di campi espansa e aggiornata regolarmente.
Limitato a un insieme fisso di tipi di luoghi. Accedi a una selezione ampliata e aggiornata regolarmente di tipi di luoghi.
È supportata la ricerca basata sul testo con la parola chiave. La ricerca basata sul testo non è supportata. Utilizza Ricerca di testo (nuova).

Confronto del codice

Questa sezione confronta il codice dei metodi di ricerca nelle vicinanze 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.

Ricerca nelle vicinanze (legacy)

La precedente ricerca nelle vicinanze ti consente di cercare luoghi all'interno di un'area specifica per parola chiave o tipo. Non è possibile limitare le ricerche utilizzando i campi dei dati dei luoghi, pertanto tutti i campi disponibili vengono restituiti con ogni richiesta. Il seguente snippet mostra la chiamata a nearbySearch() per restituire informazioni sui ristoranti di Sydney, in Australia. La richiesta è sincrona, utilizza un callback e include un controllo condizionale obbligatorio su PlacesServiceStatus.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

  const marker = new google.maps.Marker({
    map,
    position: place.geometry.location,
    title: place.name,
  });
}

Scopri di più

Ricerca nelle vicinanze (novità)

La nuova versione della Ricerca nelle vicinanze migliora la precedente nei seguenti modi:

  • La possibilità di specificare quali campi di dati dei luoghi restituire.
  • L'utilizzo di Promise che consente l'esecuzione asincrona.
  • Non è necessario controllare lo stato di PlacesService; al suo posto può essere utilizzata la gestione degli errori standard.

Il seguente snippet di codice mostra una funzione che effettua una richiesta di ricerca nelle vicinanze per i ristoranti. Questo esempio mostra l'utilizzo dell'opzione rankPreference per classificare i risultati di ricerca in base alla popolarità (nella versione precedente il ranking viene specificato utilizzando l'opzione rankBy). Poiché il metodo searchNearby() utilizza l'operatore await, può essere utilizzato solo all'interno di una funzione async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    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");
  }
}

Scopri di più