Eseguire la migrazione alla nuova Ricerca nelle vicinanze

Sviluppatori dello Spazio economico europeo (SEE)

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

  • La versione precedente di PlacesService ha un metodo nearbySearch() che ti consente di cercare luoghi all'interno di un'area specificata 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 ampliata 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 (Nuovo)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Richiede l'utilizzo di un callback per gestire l'oggetto dei risultati e la risposta google.maps.places.PlacesServiceStatus. Utilizza le Promise e funziona in modo asincrono.
Richiede un controllo PlacesServiceStatus. Non è richiesto alcun controllo dello stato, è possibile utilizzare la gestione degli errori standard. Ulteriori informazioni.
Supporta solo l'orientamento della località. Supporta l'influenza della località e la limitazione della località.
Restituisce tutti i campi di dati disponibili (un sottoinsieme dei campi supportati); non può essere limitato a campi specifici. Restituisce solo i campi di dati dei luoghi richiesti; la classe Place offre una selezione di campi ampliata e aggiornata regolarmente.
Limitato a un insieme fisso di tipi di luoghi. Accedi a una selezione ampliata e regolarmente aggiornata di tipi di luoghi.
Ricerca basata su testo supportata con la parola chiave. La ricerca testuale non è supportata. Utilizza invece Text Search (New).

Confronto del codice

Questa sezione mette a confronto il codice per i metodi di Nearby Search 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 su testo.

Nearby Search (legacy)

La versione precedente di Nearby Search ti consente di cercare luoghi all'interno di un'area specificata per parola chiave o tipo. Non è possibile limitare le ricerche utilizzando i campi di 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ù

Nearby Search (nuova)

La nuova versione di Nearby Search migliora rispetto alla precedente nei seguenti modi:

  • La possibilità di specificare quali campi di dati dei luoghi restituire.
  • L'utilizzo di Promise, che consente l'operazione asincrona.
  • Non è necessario controllare lo stato di PlacesService; è possibile utilizzare invece la gestione degli errori standard.

Il seguente snippet di codice mostra una funzione che effettua una richiesta di ricerca Nearby Search 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ù