Cómo migrar a la nueva experiencia de Nearby Search

En esta página, se explican las diferencias entre la búsqueda de lugares cercanos como se usa en la clase Place (nueva) y la PlacesService (heredada), y se proporcionan algunos fragmentos de código para compararlos.

  • El PlacesService heredado tiene un método nearbySearch(), que te permite buscar lugares dentro de un área especificada por palabra clave o tipo.
  • La clase Place tiene un método searchNearby() que te permite buscar lugares dentro de un área especificada por tipo de lugar, con una selección expandida de campos de datos de lugares y tipos de lugares para mayor flexibilidad.

En la siguiente tabla, se enumeran algunas de las diferencias principales en los métodos de búsqueda cercana entre la clase Place y PlacesService:

PlacesService (heredada) Place (nuevo)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Requiere el uso de una devolución de llamada para controlar el objeto de resultados y la respuesta google.maps.places.PlacesServiceStatus. Usa promesas y funciona de forma asíncrona.
Requiere una verificación de PlacesServiceStatus. No se requiere verificación de estado, se puede usar el manejo de errores estándar.
Solo admite sesgo de ubicación. Admite el sesgo de ubicación y la restricción de ubicación.
Muestra todos los campos de datos disponibles (un subconjunto de los campos admitidos). No se puede limitar a campos específicos. Muestra solo los campos de datos de lugares solicitados. La clase Place ofrece una selección de campos expandida y actualizada con regularidad.
Se limita a un conjunto fijo de tipos de lugares. Accede a una selección expandida y actualizada con frecuencia de tipos de lugares.
Se admite la búsqueda basada en texto con la palabra clave. No se admite la búsqueda basada en texto. En su lugar, usa Text Search (nueva).

Comparación de código

En esta sección, se compara el código de los métodos de búsqueda de lugares cercanos para ilustrar las diferencias entre el servicio de Places y la clase Place. Los fragmentos de código muestran el código requerido en cada API respectiva para realizar una solicitud de búsqueda basada en texto.

Búsqueda de lugares cercanos (heredada)

La Búsqueda de lugares cercanos heredada te permite buscar lugares dentro de un área específica a través de palabras clave o tipos. No es posible limitar las búsquedas con campos de datos de lugares para que se muestren todos los campos disponibles con cada solicitud. En el siguiente fragmento, se muestra cómo llamar a nearbySearch() para mostrar información sobre los restaurantes de Sídney, Australia. La solicitud es síncrona, usa una devolución de llamada y, además, incluye una verificación condicional obligatoria en 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,
  });
}

Más información

Nearby Search (nuevo)

La nueva versión de la Búsqueda cercana mejora a su predecesora de las siguientes maneras:

  • La capacidad de especificar qué campos de datos de lugar se mostrarán
  • El uso de promesas que habilita la operación asíncrona
  • No es necesario verificar el estado de PlacesService; en su lugar, se puede usar el manejo de errores estándar.

En el siguiente fragmento de código, se muestra una función que realiza una solicitud de Búsqueda cercana para restaurantes. En este ejemplo, se muestra el uso de la opción rankPreference para clasificar los resultados de la búsqueda por popularidad (en la versión anterior, la clasificación se especifica con la opción rankBy). Debido a que el método searchNearby() usa el operador await, solo se puede usar dentro de una función 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");
  }
}

Más información