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étodonearbySearch()
, que te permite buscar lugares dentro de un área especificada por palabra clave o tipo. - La clase
Place
tiene un métodosearchNearby()
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
- Consulta la documentación de la versión heredada de Nearby Search
- Consulta la referencia de
searchNearby()
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
- Ver el ejemplo de código completo
- Consulta la documentación de Nearby Search (nuevo)
- Consulta la referencia de
searchNearby()