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
PlacesService
(heredada), y se proporcionan algunos fragmentos de código para la comparación.
El PlacesService heredado tiene los siguientes métodos de búsqueda basados en texto:
- El método
findPlaceFromQuery(), que toma una consulta de texto y muestra 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 consulta de texto y muestra 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 te permite
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() |
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 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 manejo 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 |
| Los campos de datos de lugares se formatean con snake_case | Los campos de datos de lugares se formatean con camelCase |
| Muestra un solo resultado de lugar | Muestra 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 y . |
textSearch() |
searchByText() |
| 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 lugares 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 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 e incluye una verificación condicional en PlacesServiceStatus. Los campos de datos de lugares 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
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 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 itera por los resultados y agrega un marcador para cada uno, ajustando los límites del mapa según la posición de los marcadores. Debido a 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 los lugares que están abiertos.minRating, que te permite filtrar los resultados por debajo del límite especificado (por ejemplo, solo muestra los lugares con tres estrellas o más).locationRestriction, que omite los resultados fuera de la ubicación especificada (locationBiastambién es compatible).
Más información
- Consulta el ejemplo de código completo
- Consulta la documentación de Text Search (nueva)
- Consulta la referencia de
searchByText()