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 Place clase (nueva) y la PlacesService (heredada), y se proporcionan algunos fragmentos de código para la comparación.

  • La PlacesService heredada tiene un método nearbySearch(), que te permite buscar lugares en un área específica a través de palabras clave o tipos.
  • La clase Place tiene un método searchNearby() que te permite buscar lugares en un área específica por tipo de lugar, utilizando una selección ampliada de campos de datos de lugar y tipos de lugar 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 (heredada) Place (nueva)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Requiere el uso de una devolución de llamada para controlar el objeto de resultado y google.maps.places.PlacesServiceStatus respuesta. Usa Promises y funciona de forma asíncrona.
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 el 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 restringir a campos específicos. Muestra solo los campos de datos de lugar solicitados; la clase Place ofrece una selección ampliada y actualizada con regularidad de campos.
Se limita a un conjunto fijo de tipos de lugares. Accede a una selección ampliada y actualizada con regularidad 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 Places Service 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 Nearby Search heredada te permite buscar lugares en un área específica a través de palabras clave o tipos. No es posible restringir las búsquedas mediante el uso de campos de datos de lugar, de modo que todos los campos disponibles se muestren con cada solicitud. En el siguiente fragmento, se muestra la llamada a nearbySearch() para mostrar información sobre restaurantes en Sídney, Australia. La solicitud es síncrona, usa una devolución de llamada e 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,
  });
}

Obtén más información

Nearby Search (nueva)

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 Promises 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 Nearby Search 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");
  }
}

Obtén más información