En esta página, se explican las diferencias entre las funciones de búsqueda de lugares basada en texto de la clase Place (nueva) y la clase PlacesService (heredada), y se proporcionan algunos fragmentos de código para compararlas.
La clase PlacesService heredada tiene los siguientes métodos de búsqueda basados en texto:
- El método
findPlaceFromQuery(), que toma una consulta de texto y devuelve un solo resultado de lugar, y admite el uso de campos de datos de lugar. - 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 antigua y no admite el uso de campos de datos de lugar.
La nueva clase Place ofrece el método Place.searchByText(), que te permite buscar lugares con una búsqueda 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 frecuencia.
En la siguiente tabla, se enumeran algunas de las diferencias principales en los métodos de búsqueda de lugares entre la clase Place y PlacesService:
PlacesService (heredado) |
Place (nuevo) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Opciones de consulta limitadas | Opciones de consulta 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. |
Requiere una verificación de PlacesServiceStatus. |
No se requiere una verificación de estado, se puede usar el manejo de errores estándar. Obtén más información. |
| Solo admite la preferencia de ubicación. | Admite la personalización de ubicación y la restricción de ubicación. |
| Los campos de datos de Place tienen el formato de minúsculas con guiones bajos. | Los campos de datos de Place tienen el formato de mayúsculas mediales. |
| 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); no se puede restringir 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. En los fragmentos de código, se muestra el código necesario 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 cómo usar el método findPlaceFromQuery() para buscar un lugar. La solicitud es síncrona y, además, incluye 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
- Consulta 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 cómo usar el método searchByText() para buscar lugares. La solicitud es asíncrona y no requiere una verificación de estado
(se puede usar el manejo 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 recorre los resultados y agrega un marcador para cada uno, ajustando los límites del mapa según la posición de los marcadores. Como 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 se devuelvan los lugares que están abiertos.minRating, que te permite filtrar los resultados que se encuentran 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 (también se admitelocationBias).
Más información
- Consulta el ejemplo de código completo
- Consulta la documentación de Text Search (nuevo)
- Consulta la referencia de
searchByText()