Cómo migrar a la nueva experiencia de Nearby Search

Desarrolladores del Espacio Económico Europeo (EEE)

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

  • El objeto 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 ampliada de campos de datos y tipos de lugares para una mayor flexibilidad.

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

PlacesService (heredado) Place (Nuevo)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Requiere el uso de una devolución de llamada para controlar el objeto de resultados y la respuesta de google.maps.places.PlacesServiceStatus. Usa promesas y funciona de forma asíncrona.
Se requiere una verificación de PlacesServiceStatus. No se requiere una verificación de estado. Se puede usar el control de errores estándar. Obtén más información.
Solo admite la sesgo por ubicación. Admite la restricción y el sesgo de ubicación.
Devuelve todos los campos de datos disponibles (un subconjunto de los campos admitidos) y no se puede limitar a campos específicos. Devuelve solo los campos de datos de lugar solicitados. La clase Place ofrece una selección de campos ampliada y actualizada con regularidad.
Se limita a un conjunto fijo de tipos de lugares. Accede a una selección ampliada y actualizada con frecuencia de tipos de lugares.
Búsqueda basada en texto compatible 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 cercana 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.

Nearby Search (heredada)

La versión heredada de Nearby Search te permite buscar lugares dentro de un área especificada por palabra clave o tipo. No es posible limitar las búsquedas con campos de datos de lugares, por lo que todos los campos disponibles se devuelven con cada solicitud. En el siguiente fragmento, se muestra una llamada a nearbySearch() para devolver información sobre restaurantes en 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 Nearby Search mejora su predecesora de las siguientes maneras:

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

En el siguiente fragmento de código, se muestra una función que realiza una solicitud de Búsqueda cercana de 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 especificaba con la opción rankBy). Dado 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