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
PlacesServiceheredada tiene un métodonearbySearch(), que te permite buscar lugares en un área específica a través de palabras clave o tipos. - La clase
Placetiene un métodosearchNearby()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
- Consulta el ejemplo de código completo.
- Consulta la documentación de Nearby Search (nueva).
- Consulta la referencia de
searchNearby().