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.

  • L'API Places legacy PlacesService ha un metodo nearbySearch(), che ti consente di cercare luoghi all'interno di un'area specificata in base a parola chiave o tipo.
  • La classe Place ha un metodo searchNearby() che ti consente di cercare luoghi all'interno di un'area specifica per tipo di luogo, utilizzando una selezione più ampia di campi di dati sui luoghi e tipi di luoghi per una maggiore flessibilità.

La seguente tabella 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 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à.
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; la classe Place offre una selezione di campi più ampia e aggiornata regolarmente.
Limitato a un insieme fisso di tipi di luoghi. Accedi a una selezione più ampia e regolarmente aggiornata di tipi di luoghi.
Ricerca basata su testo supportata con la parola chiave. La ricerca basata sul testo non è supportata. Utilizza Ricerca di testo (nuova).

Confronto del codice

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

Nearby Search (legacy)

La ricerca nelle vicinanze precedente ti consente di cercare luoghi all'interno di un'area specifica in base a parola chiave o tipo. Non è possibile vincolare le ricerche utilizzando i campi dei dati sui luoghi, in modo che tutti i campi disponibili vengano 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 (New)

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

  • La possibilità di specificare quali campi di dati sui luoghi restituire.
  • L'utilizzo di Promises, 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 esegue 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 la classificazione è specificata 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ù