En esta página, se explican las diferencias entre las funciones de búsqueda de lugares basadas en texto en la clase Place
(nueva) y la clase PlacesService
(heredada), y se proporcionan algunos fragmentos de código para realizar comparaciones.
El objeto PlacesService
heredado tiene los siguientes métodos de búsqueda basados en texto:
- El método
findPlaceFromQuery()
, que toma una búsqueda de texto y devuelve un solo resultado de lugar, y admite el uso de campos de datos de lugares. - El método
findPlaceFromPhoneNumber()
, que te permite buscar un lugar con un número de teléfono y admite el uso de campos de datos de lugares. - El método
textSearch()
, que toma una búsqueda de texto y devuelve una lista de resultados de lugares.textSearch()
es más antiguo y no admite el uso de campos de datos de lugares.
La nueva clase Place
ofrece el método Place.searchByText()
, que te permite buscar lugares con una consulta de texto o un número de teléfono, y personalizar tus búsquedas con una selección ampliada de campos de datos de lugares y tipos de lugares que se actualizan con regularidad.
En la siguiente tabla, se enumeran algunas de las principales diferencias en los métodos de búsqueda de lugares entre la clase Place
y PlacesService
:
PlacesService (heredado) |
Place (Nuevo) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
Opciones de consulta limitadas | Opciones de búsqueda más amplias |
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. |
Los campos de datos de lugar tienen el formato snake case. | Los campos de datos de lugar se formatean con camel case. |
Devuelve un solo resultado de lugar. | Devuelve hasta 20 resultados de lugares. |
Se limita a un conjunto fijo de tipos de lugares y campos de datos de lugares. | Proporciona una selección ampliada de tipos de lugares y campos de datos de lugares que se actualizan con regularidad. |
textSearch() |
searchByText() |
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. |
Comparación de código
En esta sección, se compara el código de los métodos de búsqueda de texto 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.
Servicio Places (heredado)
En el siguiente fragmento de código, se muestra el uso del método findPlaceFromQuery()
para buscar un lugar. La solicitud es síncrona y contiene una verificación condicional en PlacesServiceStatus
. Los campos de datos de lugar necesarios se especifican en el cuerpo de la solicitud, que se define antes de realizar la solicitud real.
function findPlaces() {
const request = {
query: "Museum of Contemporary Art Australia",
fields: ["name", "geometry"],
};
// Create an instance of PlacesService.
service = new google.maps.places.PlacesService(map);
// Make a findPlaceFromQuery request.
service.findPlaceFromQuery(request, (results, status) => {
let place = results[0];
if (status === google.maps.places.PlacesServiceStatus.OK && results) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
map.setCenter(place.geometry.location);
}
});
}
Más información
- Ver el ejemplo de código completo
- Consulta la documentación.
- Referencia de la interfaz de
FindPlaceFromQueryRequest
Text Search (nueva)
En el siguiente fragmento de código, se muestra el uso del método searchByText()
para buscar lugares. La solicitud es asíncrona y no requiere una verificación de estado (se puede usar el control de errores estándar). En este ejemplo, la solicitud incluye un maxResultCount
de 8 (el valor debe estar entre 1 y 20). Esta función itera los resultados y agrega un marcador para cada uno, ajustando los límites del mapa según la posición de los marcadores. Dado que el método searchByText()
usa el operador await
, solo se puede usar dentro de una función async
.
async function findPlaces() {
// Define a request.
// The `fields` property is required; all others are optional.
const request = {
fields: ["displayName", "location", "businessStatus"],
textQuery: "Tacos in Mountain View",
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
// Call searchByText passing the request.
const { places } = await google.maps.places.Place.searchByText(request);
// Add a marker for each result.
if (places.length) {
const bounds = new google.maps.LatLngBounds();
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");
}
}
El método searchByText()
admite muchas más opciones de solicitud en comparación con la versión anterior, incluidas las siguientes:
includedType
, que te permite restringir las búsquedas a un tipo de lugar específico.isOpenNow
, que te permite restringir las búsquedas para que solo muestren lugares abiertos.minRating
, que te permite filtrar los resultados por debajo del límite especificado (por ejemplo, solo mostrar lugares con tres estrellas o más)locationRestriction
, que omite los resultados fuera de la ubicación especificada (locationBias
también es compatible).
Más información
- Ver el ejemplo de código completo
- Consulta la documentación de Text Search (nuevo)
- Consulta la referencia de
searchByText()