El widget de Place Autocomplete crea un campo de entrada de texto, proporciona predicciones de lugares en una lista de selección de la IU y muestra detalles de lugares como respuesta a la selección del usuario. Usa el widget de Place Autocomplete para incorporar una interfaz de usuario de autocompletado completa y autónoma en tu página web.
Requisitos previos
Para usar Place Autocomplete, debes habilitar "API de Places (nueva)" en tu proyecto de Google Cloud. Consulta Cómo comenzar para obtener información detallada.
Novedades
Place Autocomplete incluye las siguientes mejoras:
- La IU del widget de Autocomplete admite la localización regional (incluidos los idiomas RTL) para el marcador de posición de entrada de texto, el logotipo de la lista de predicciones y las predicciones sobre lugares.
- Se mejoró la accesibilidad, incluida la compatibilidad con los lectores de pantalla y la interacción con el teclado.
- El widget de Autocomplete muestra la nueva clase Place para simplificar el manejo del objeto que se devuelve.
- Incluye una mejor compatibilidad con dispositivos móviles y pantallas pequeñas.
- Tiene un mejor rendimiento y una apariencia gráfica mejorada.
Cómo agregar un widget de Autocomplete
El widget de Autocomplete crea un campo de entrada de texto, proporciona predicciones de lugares en una lista de selección de IU y muestra detalles de lugares en respuesta a un clic del usuario a través del objeto de escucha gmp-select. En esta sección, se muestra cómo agregar un widget de Autocomplete a una página web o a un mapa de Google.
Cómo agregar un widget de Autocomplete a una página web
Para agregar el widget de Autocomplete a una página web, crea un nuevo google.maps.places.PlaceAutocompleteElement y agrégalo a la página como se muestra en el siguiente ejemplo:
TypeScript
// Request needed libraries. (await google.maps.importLibrary('places')) as google.maps.PlacesLibrary; // Create the input HTML element, and append it. const placeAutocomplete = new google.maps.places.PlaceAutocompleteElement( {} ); document.body.appendChild(placeAutocomplete);
JavaScript
// Request needed libraries. (await google.maps.importLibrary('places')); // Create the input HTML element, and append it. const placeAutocomplete = new google.maps.places.PlaceAutocompleteElement({}); document.body.appendChild(placeAutocomplete);
Ver el ejemplo de código completo
Cómo agregar un widget de Autocomplete a un mapa
Si tu dirección de facturación se encuentra fuera del Espacio Económico Europeo (EEE), también puedes usar el widget de Autocomplete con un mapa de Google.
Si deseas agregar un widget de Autocomplete a un mapa, crea una nueva instancia de google.maps.places.PlaceAutocompleteElement, agrega el PlaceAutocompleteElement a un div y envíalo al mapa como un control personalizado, tal como se muestra en el siguiente ejemplo:
TypeScript
// Get the inner map. innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); // Use the bounds_changed event to restrict results to the current map bounds. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); });
JavaScript
// Get the inner map. innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); // Use the bounds_changed event to restrict results to the current map bounds. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); });
Ver el ejemplo de código completo
Cómo restringir las predicciones de Autocomplete
De forma predeterminada, Place Autocomplete presenta todos los tipos de lugares, personalizados según la ubicación del usuario, y obtiene información de todos los campos de datos disponibles para el lugar que este selecciona. Configura PlaceAutocompleteElementOptions para presentar predicciones más relevantes restringiendo o sesgando los resultados.
La restricción de resultados hace que el widget de Autocomplete ignore cualquier resultado que esté fuera del área de restricción. Una práctica común es restringir los resultados a los límites del mapa. La personalización de resultados hace que el widget de Autocomplete muestre resultados dentro del área especificada, pero algunas coincidencias pueden estar fuera de esa área.
Si no proporcionas límites ni un viewport de mapa, la API intentará detectar la ubicación del usuario a partir de su dirección IP y personalizará los resultados en función de esa ubicación. Establece límites siempre que sea posible. De lo contrario, los distintos usuarios podrían recibir predicciones diferentes. Además, para mejorar las predicciones en general, es importante proporcionar un viewport razonable, como el que estableces cuando realizas desplazamientos laterales o utilizas el zoom en el mapa, o un viewport definido por el desarrollador según la ubicación y el radio del dispositivo. Cuando no hay un radio disponible, se considera que 5 km es un valor predeterminado razonable para Place Autocomplete. No establezcas un viewport con un radio de cero (un solo punto), un viewport de pocos metros de ancho (menos de 100 m) ni uno que abarque todo el mundo.
Cómo restringir la búsqueda de lugares por país
Si deseas restringir la búsqueda de lugares a uno o más países específicos, usa la propiedad includedRegionCodes para especificar los códigos de país como se muestra en el siguiente fragmento:
const pac = new google.maps.places.PlaceAutocompleteElement({ includedRegionCodes: ['us', 'au'], });
Cómo restringir la búsqueda de lugares a los límites del mapa
Para restringir la búsqueda de lugares a los límites de un mapa, usa la propiedad locationRestrictions para agregar los límites, como se muestra en el siguiente fragmento:
const pac = new google.maps.places.PlaceAutocompleteElement({ locationRestriction: map.getBounds(), });
Cuando restrinjas la búsqueda a los límites del mapa, asegúrate de agregar un objeto de escucha para actualizar los límites cuando estos cambien:
map.addListener('bounds_changed', () => { autocomplete.locationRestriction = map.getBounds(); });
Para quitar la propiedad locationRestriction, configúrala como null.
Cómo personalizar los resultados de la búsqueda de lugares
Personaliza los resultados de la búsqueda a un área circular usando la propiedad locationBias y pasando un radio, como se muestra aquí:
const autocomplete = new google.maps.places.PlaceAutocompleteElement({ locationBias: {radius: 100, center: {lat: 50.064192, lng: -130.605469}}, });
Para quitar la propiedad locationBias, configúrala como null.
Cómo restringir los resultados de la búsqueda de lugares a determinados tipos
Si deseas restringir los resultados de la búsqueda de lugares a determinados tipos de lugares, utiliza la propiedad includedPrimaryTypes y especifica uno o más tipos, como se muestra a continuación:
const autocomplete = new google.maps.places.PlaceAutocompleteElement({ includedPrimaryTypes: ['establishment'], });
Para obtener una lista completa de los tipos admitidos, consulta las tablas A y B de tipos de lugares.
Cómo obtener detalles de un lugar
Para obtener detalles del lugar seleccionado, agrega un objeto de escucha gmp-select a PlaceAutocompleteElement, como se muestra en el siguiente ejemplo:
TypeScript
// Add the gmp-placeselect listener, and display the results. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'] }); selectedPlaceTitle.textContent = 'Selected Place:'; selectedPlaceInfo.textContent = JSON.stringify( place.toJSON(), /* replacer */ null, /* space */ 2); });
JavaScript
// Add the gmp-placeselect listener, and display the results. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'] }); selectedPlaceTitle.textContent = 'Selected Place:'; selectedPlaceInfo.textContent = JSON.stringify(place.toJSON(), /* replacer */ null, /* space */ 2); });
Ver el ejemplo de código completo
En el ejemplo anterior, el objeto de escucha de eventos devuelve un objeto de clase Place.
Llama a place.fetchFields() para obtener los campos de datos de Place Details que necesita tu aplicación.
El objeto de escucha del siguiente ejemplo solicita información sobre un lugar y la muestra en un mapa.
TypeScript
// Add the gmp-placeselect listener, and display the results on the map. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'], }); // If the place has a geometry, then present it on a map. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location); innerMap.setZoom(17); } let content = document.createElement('div'); let nameText = document.createElement('span'); nameText.textContent = place.displayName; content.appendChild(nameText); content.appendChild(document.createElement('br')); let addressText = document.createElement('span'); addressText.textContent = place.formattedAddress; content.appendChild(addressText); updateInfoWindow(content, place.location); marker.position = place.location; } );
JavaScript
// Add the gmp-placeselect listener, and display the results on the map. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'], }); // If the place has a geometry, then present it on a map. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location); innerMap.setZoom(17); } let content = document.createElement('div'); let nameText = document.createElement('span'); nameText.textContent = place.displayName; content.appendChild(nameText); content.appendChild(document.createElement('br')); let addressText = document.createElement('span'); addressText.textContent = place.formattedAddress; content.appendChild(addressText); updateInfoWindow(content, place.location); marker.position = place.location; });
Ver el ejemplo de código completo
Mapas de ejemplo
Esta sección contiene el código completo de los mapas de ejemplo que se muestran en esta página.
Elemento de Autocomplete
En este ejemplo, se agrega un widget de Autocomplete a una página web y se muestran los resultados para cada lugar seleccionado.
TypeScript
async function initMap(): Promise<void> { // Request needed libraries. (await google.maps.importLibrary('places')) as google.maps.PlacesLibrary; // Create the input HTML element, and append it. const placeAutocomplete = new google.maps.places.PlaceAutocompleteElement( {} ); document.body.appendChild(placeAutocomplete); // Inject HTML UI. const selectedPlaceTitle = document.createElement('p'); selectedPlaceTitle.textContent = ''; document.body.appendChild(selectedPlaceTitle); const selectedPlaceInfo = document.createElement('pre'); selectedPlaceInfo.textContent = ''; document.body.appendChild(selectedPlaceInfo); // Add the gmp-placeselect listener, and display the results. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'] }); selectedPlaceTitle.textContent = 'Selected Place:'; selectedPlaceInfo.textContent = JSON.stringify( place.toJSON(), /* replacer */ null, /* space */ 2); }); } initMap();
JavaScript
async function initMap() { // Request needed libraries. (await google.maps.importLibrary('places')); // Create the input HTML element, and append it. const placeAutocomplete = new google.maps.places.PlaceAutocompleteElement({}); document.body.appendChild(placeAutocomplete); // Inject HTML UI. const selectedPlaceTitle = document.createElement('p'); selectedPlaceTitle.textContent = ''; document.body.appendChild(selectedPlaceTitle); const selectedPlaceInfo = document.createElement('pre'); selectedPlaceInfo.textContent = ''; document.body.appendChild(selectedPlaceInfo); // Add the gmp-placeselect listener, and display the results. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'] }); selectedPlaceTitle.textContent = 'Selected Place:'; selectedPlaceInfo.textContent = JSON.stringify(place.toJSON(), /* replacer */ null, /* space */ 2); }); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } p { font-family: Roboto, sans-serif; font-weight: bold; }
HTML
<html>
<head>
<title>Place Autocomplete element</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<p style="font-family: roboto, sans-serif">Search for a place here:</p>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});</script>
</body>
</html>Prueba la muestra
Mapa con Autocomplete
En este ejemplo, se muestra cómo agregar un widget de Autocomplete a un mapa de Google Maps.
TypeScript
const mapElement = document.querySelector('gmp-map') as google.maps.MapElement; const placeAutocomplete = document.querySelector( 'gmp-place-autocomplete' ) as google.maps.places.PlaceAutocompleteElement; let innerMap; let marker: google.maps.marker.AdvancedMarkerElement; let infoWindow: google.maps.InfoWindow; let center = { lat: 40.749933, lng: -73.98633 }; // New York City async function initMap(): Promise<void> { // Request needed libraries. const [] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); // Get the inner map. innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); // Use the bounds_changed event to restrict results to the current map bounds. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); }); // Create the marker and infowindow. marker = new google.maps.marker.AdvancedMarkerElement({ map: innerMap, }); infoWindow = new google.maps.InfoWindow({}); // Add the gmp-placeselect listener, and display the results on the map. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'], }); // If the place has a geometry, then present it on a map. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location); innerMap.setZoom(17); } let content = document.createElement('div'); let nameText = document.createElement('span'); nameText.textContent = place.displayName; content.appendChild(nameText); content.appendChild(document.createElement('br')); let addressText = document.createElement('span'); addressText.textContent = place.formattedAddress; content.appendChild(addressText); updateInfoWindow(content, place.location); marker.position = place.location; } ); } // Helper function to create an info window. function updateInfoWindow(content, center) { infoWindow.setContent(content); infoWindow.setPosition(center); infoWindow.open({ map: innerMap, anchor: marker, shouldFocus: false, }); } initMap();
JavaScript
const mapElement = document.querySelector('gmp-map'); const placeAutocomplete = document.querySelector('gmp-place-autocomplete'); let innerMap; let marker; let infoWindow; let center = { lat: 40.749933, lng: -73.98633 }; // New York City async function initMap() { // Request needed libraries. const [] = await Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); // Get the inner map. innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); // Use the bounds_changed event to restrict results to the current map bounds. google.maps.event.addListener(innerMap, 'bounds_changed', async () => { placeAutocomplete.locationRestriction = innerMap.getBounds(); }); // Create the marker and infowindow. marker = new google.maps.marker.AdvancedMarkerElement({ map: innerMap, }); infoWindow = new google.maps.InfoWindow({}); // Add the gmp-placeselect listener, and display the results on the map. //prettier-ignore //@ts-ignore placeAutocomplete.addEventListener('gmp-select', async ({ placePrediction }) => { const place = placePrediction.toPlace(); await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'], }); // If the place has a geometry, then present it on a map. if (place.viewport) { innerMap.fitBounds(place.viewport); } else { innerMap.setCenter(place.location); innerMap.setZoom(17); } let content = document.createElement('div'); let nameText = document.createElement('span'); nameText.textContent = place.displayName; content.appendChild(nameText); content.appendChild(document.createElement('br')); let addressText = document.createElement('span'); addressText.textContent = place.formattedAddress; content.appendChild(addressText); updateInfoWindow(content, place.location); marker.position = place.location; }); } // Helper function to create an info window. function updateInfoWindow(content, center) { infoWindow.setContent(content); infoWindow.setPosition(center); infoWindow.open({ map: innerMap, anchor: marker, shouldFocus: false, }); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ gmp-map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .place-autocomplete-card { background-color: #fff; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; margin: 10px; padding: 5px; font-family: Roboto, sans-serif; font-size: large; font-weight: bold; } gmp-place-autocomplete { width: 300px; } #infowindow-content .title { font-weight: bold; } #map #infowindow-content { display: inline; }
HTML
<html>
<head>
<title>Place Autocomplete map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});</script>
</head>
<body>
<gmp-map center="40.749933,-73.98633" zoom="13" map-id="DEMO_MAP_ID">
<div
class="place-autocomplete-card"
slot="control-inline-start-block-start">
<p>Search for a place here:</p>
<gmp-place-autocomplete></gmp-place-autocomplete>
</div>
</gmp-map>
</body>
</html>Prueba la muestra
Cómo utilizar el componente Place Picker
El componente de selector de lugares es una entrada de texto que permite a los usuarios finales buscar una dirección o un lugar específicos con la función de autocompletar. Forma parte de la Biblioteca de componentes extendidos, un conjunto de componentes web que ayuda a los desarrolladores a crear mejores mapas y funciones de ubicación más rápido.
Usa el configurador de Place Picker para crear código incorporable para un componente de Place Picker personalizado y, luego, expórtalo para usarlo con frameworks populares como React y Angular, o sin ningún framework.
Optimización de Autocomplete (nuevo)
En esta sección, se describen algunas prácticas recomendadas que te ayudarán a aprovechar al máximo el servicio Autocomplete (nuevo).
A continuación, se indican algunos lineamientos generales:
- La forma más rápida de desarrollar una interfaz de usuario funcional es usar el widget de Autocomplete (nuevo) de la API de Maps JavaScript, el widget de Autocomplete (nuevo) del SDK de Places para Android o el widget de Autocomplete (nuevo) del SDK de Places para iOS.
- Comprende los campos de datos esenciales de Autocomplete (nuevo) desde el principio.
- Los campos de restricción y personalización de la ubicación son opcionales, pero pueden afectar significativamente el rendimiento del autocompletado.
- Usa el procedimiento de manejo de errores para asegurarte de que tu app administre el problema de forma adecuada si la API muestra un error.
- Asegúrate de que tu app gestione correctamente los problemas cuando no haya selección y ofrezca a los usuarios una manera de continuar.
Prácticas recomendadas para la optimización de los costos
Optimización básica de los costos
Para optimizar el costo de usar el servicio Autocomplete (nuevo), usa máscaras de campo en los widgets de Place Details (nuevo) y Autocomplete (nuevo) para mostrar solo los campos de datos de Autocomplete (nuevo) que necesitas.
Optimización avanzada de los costos
Considera utilizar la implementación programática de Autocomplete (nuevo) para acceder a los SKU: precios de solicitudes de Autocomplete y solicitar resultados de la API de Geocoding sobre el lugar seleccionado en lugar de utilizar Place Details (nuevo). Los precios por solicitud asociados con la API de Geocoding son más rentables que los precios por sesión (basados en sesión) si se cumplen las siguientes condiciones:
- Si solo necesitas las coordenadas de latitud y longitud, o la dirección del lugar seleccionado por el usuario, la API de Geocoding proporciona esta información de manera más fácil que una llamada a Place Details (nuevo).
- Si los usuarios seleccionan una predicción de autocompletar con un promedio de cuatro solicitudes o menos, el precio por solicitud puede ser más rentable que el precio por sesión.
¿Tu aplicación requiere algún dato diferente de la dirección y las coordenadas de latitud o longitud de la predicción seleccionada?
Sí, necesita más detalles
Usa Autocomplete basado en sesiones (nuevo) con Place Details (nuevo).
Dado que tu aplicación requiere Place Details (nuevo), como el nombre del lugar, el estado comercial o el horario de atención, tu implementación de Autocomplete (nuevo) debe usar un token de sesión
(de forma programática o integrado en los widgets de
JavaScript,
Android
o iOS)
por sesión, además de los SKU de Places aplicables,
según los campos de datos de lugares que solicites.1
Implementación de widgets
La administración de sesiones está integrada automáticamente en los widgets de
JavaScript,
Android,
o iOS. Esto incluye las solicitudes de Autocomplete (nuevo) y Place Details (nuevo) en la predicción seleccionada. Asegúrate de especificar el parámetro fields para asegurarte de solicitar únicamente los campos de datos de Autocomplete (nuevo) que necesitas.
Implementación programática
Usa un
token de sesión
con tus solicitudes de Autocomplete (nuevo). Cuando solicites Place Details (nuevo) sobre la predicción seleccionada, incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Autocomplete (nuevo)
- Es el token de sesión que se usó en la solicitud de Autocomplete (nuevo).
- El parámetro
fieldsque especifica los campos de datos de Autocomplete (nuevo) que necesitas
No, solo requiere la dirección y la ubicación
La API de Geocoding podría ser una opción más rentable que Place Details (nuevo) para tu aplicación, según el rendimiento de tu uso de Autocomplete (nuevo). La eficiencia de Autocomplete (nuevo) de cada aplicación varía según las búsquedas que ingresan los usuarios, dónde se usa la aplicación y si se siguen las prácticas recomendadas de optimización del rendimiento.
Para responder la siguiente pregunta, analiza cuántos caracteres escribe un usuario en promedio antes de seleccionar una predicción de Autocomplete (nuevo) en tu aplicación.
¿Tus usuarios seleccionan, en promedio, una predicción de Autocomplete (nuevo) cada cuatro solicitudes o menos?
Sí
Implementa Autocomplete (nuevo) de manera programática sin tokens de sesión y llama a la API de Geocoding en la predicción de lugar seleccionada.
La API de Geocoding proporciona direcciones y coordenadas de latitud y longitud.
Realizar cuatro solicitudes de Autocomplete más una llamada a la API de Geocoding sobre la predicción de lugar seleccionada cuesta menos que el costo por sesión de Autocomplete (nuevo).1
Considera aplicar las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.
No
Usa Autocomplete basado en sesiones (nuevo) con Place Details (nuevo).
Dado que la cantidad promedio de solicitudes que esperas realizar antes de que un usuario seleccione una
predicción de Autocomplete (nuevo) supera el costo del precio por sesión, tu implementación
de Autocomplete (nuevo) debe usar un token de sesión para las solicitudes de Autocomplete (nuevo)
y la solicitud asociada de Place Details (nuevo)
por sesión.
1
Implementación de widgets
La administración de sesiones está integrada automáticamente en los widgets de
JavaScript,
Android,
o iOS. Esto incluye las solicitudes de Autocomplete (nuevo) y la solicitud de Place Details (nuevo) en la predicción seleccionada. Asegúrate de especificar el parámetro fields
para asegurarte de solicitar únicamente los campos que necesitas.
Implementación programática
Usa un
token de sesión
con tus solicitudes de Autocomplete (nuevo).
Cuando solicites Place Details (nuevo) sobre la predicción seleccionada, incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Autocomplete (nuevo)
- Es el token de sesión que se usó en la solicitud de Autocomplete (nuevo).
- El parámetro
fieldsque especifica campos como la dirección y la geometría
Considera retrasar las solicitudes de Autocomplete (nuevo)
Puedes emplear estrategias como demorar una solicitud de Autocomplete (nuevo) hasta que el usuario escriba los primeros tres o cuatro caracteres para que tu aplicación realice menos solicitudes. Por ejemplo, realizar solicitudes de Autocomplete (nuevo) para cada carácter después de que el usuario haya escrito el tercer carácter significa que, si el usuario escribe siete caracteres y, luego, selecciona una predicción para la que realizas una solicitud a la API de Geocoding, el costo total sería el de 4 solicitudes de Autocomplete (nuevo) por solicitud más Geocoding.1
Si retrasar las solicitudes puede hacer que tu solicitud programática promedio sea inferior a cuatro, puedes seguir las instrucciones para implementar Autocomplete (nuevo) con la API de Geocoding y obtener un rendimiento optimizado. Ten en cuenta que demorar las solicitudes puede percibirse como latencia por parte del usuario, que tal vez espere ver predicciones con cada letra que ingresa.
Considera seguir las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.
-
Para conocer los costos, consulta las listas de precios de Google Maps Platform.
Prácticas recomendadas para el rendimiento
Los siguientes lineamientos describen maneras de optimizar el rendimiento de Autocomplete (nuevo):
- Agrega restricciones por país, personalización de la ubicación y, en el caso de las implementaciones programáticas, la preferencia de idioma a la implementación de Autocomplete (nuevo). La preferencia de idioma no es necesaria para los widgets, dado que toman esta información del navegador o el dispositivo móvil del usuario.
- Si Autocomplete (nuevo) cuenta con un mapa, puedes personalizar la ubicación según su viewport.
- En las situaciones en que un usuario no elige una de las predicciones de Autocomplete (nuevo), generalmente, porque ninguna de ellas indica la dirección del resultado deseado, puedes reutilizar la entrada original del usuario para tratar de obtener resultados más relevantes:
- Si esperas que el usuario ingrese únicamente información sobre la dirección, vuelve a usar su entrada original en una llamada a la API de Geocoding.
- Si esperas que el usuario ingrese búsquedas para un lugar específico por nombre o dirección, usa una solicitud de Place Details (nuevo). Si se espera que los resultados pertenezcan únicamente a una región específica, usa la restricción de ubicación.
- Usuarios que ingresan direcciones de subinstalaciones, como direcciones de unidades o apartamentos específicos dentro de un edificio Por ejemplo, la dirección checa "Stroupežnického 3191/17, Praha" genera una predicción parcial en Autocomplete (nuevo).
- Usuarios que ingresan direcciones con prefijos de tramo de ruta, como "23-30 29th St, Queens" en la ciudad de Nueva York o "47-380 Kamehameha Hwy, Kaneohe" en la isla de Kauai en Hawái
Ajuste de la ubicación
Personaliza los resultados para un área específica pasando un parámetro location y un parámetro radius. Esto indica a Autocomplete (nuevo) que prefiera mostrar resultados dentro del área definida. Es posible que también se muestren resultados externos al área definida. Puedes usar el parámetro components para filtrar los resultados y mostrar solo los lugares dentro de un país especificado.
Restricción de ubicación
Restringe los resultados a un área específica pasando un parámetro locationRestriction.
También puedes restringir los resultados a la región definida por location y un parámetro radius agregando el parámetro locationRestriction. Esto indica a Autocomplete (nuevo) que muestre solo resultados dentro de esa región.