Descripción general
La geocodificación es el proceso que convierte las direcciones (como "1600 Amphitheatre Parkway, Mountain View, CA") en coordenadas geográficas (como latitud 37.423021 y longitud -122.083739) que puedes usar para colocar marcadores o posicionar el mapa.
La geocodificación inversa es el proceso de conversión de coordenadas geográficas en direcciones en lenguaje natural (consulta Geocodificación inversa (búsqueda de direcciones)).
También puedes utilizar el geocodificador para buscar la dirección de un ID de lugar específico.
La API de Maps JavaScript proporciona una clase de geocodificador que permite realizar la codificación geográfica y la codificación geográfica inversa de forma dinámica a partir de las entradas de los usuarios. En cambio, si deseas geocodificar direcciones conocidas y estáticas, consulta el servicio web Geocoding.
Cómo comenzar
Antes de usar el servicio Geocoding en la API de Maps JavaScript, asegúrate de que la API de Geocoding esté habilitada en la consola de Google Cloud, en el mismo proyecto que configuraste para la API de Maps JavaScript.
Para ver tu lista de APIs habilitadas, haz lo siguiente:
- Ve a la consola de Google Cloud.
- Haz clic en el botón Seleccionar un proyecto, selecciona el mismo proyecto que configuraste para la API de Maps JavaScript y haz clic en Abrir.
- En la lista de APIs del Panel, busca API de Geocoding.
- Si ves la API en la lista, no necesitas hacer nada más. Si la API no está en la lista, habilítala:
- En la parte superior de la página, selecciona HABILITAR API para abrir la pestaña Biblioteca. También puedes seleccionar Biblioteca en el menú lateral izquierdo.
- Busca la opción API de Geocoding y selecciónala en la lista de resultados.
- Selecciona HABILITAR. Cuando finalice el proceso, aparecerá la opción API de Geocoding en la lista de APIs del Panel.
Precios y políticas
Precios
El 16 de julio de 2018, entró en vigencia un nuevo plan de precios de pago por uso para Maps, Routes y Places. Para obtener más información sobre los nuevos precios y límites de uso del servicio de geocodificación de JavaScript, consulta Uso y facturación para la API de Geocoding.
Políticas
El uso del servicio Geocoding debe cumplir con las políticas que establecidas para la API de Geocoding.
Solicitudes de Geocoding
El acceso al servicio Geocoding es asíncrono, ya que la API de Google Maps debe realizar una llamada a un servidor externo. Por ese motivo, debes pasar un método de devolución de llamada para la ejecución una vez que se complete la solicitud. Este método de devolución de llamada procesa los resultados. Ten en cuenta que el geocodificador puede arrojar más de un resultado.
Puedes acceder al servicio de geocodificación de la API de Google Maps en tu código mediante el objeto constructor google.maps.Geocoder
. El método Geocoder.geocode()
inicia una solicitud dirigida al servicio de geocodificación y le pasa un literal de objeto GeocoderRequest
que contiene los términos de entrada y un método de devolución de llamada para ejecutar al recibir la respuesta.
El literal de objeto GeocoderRequest
contiene los siguientes campos:
{ address: string, location: LatLng, placeId: string, bounds: LatLngBounds, componentRestrictions: GeocoderComponentRestrictions, region: string }
Parámetros obligatorios: Debes completar solo uno de los siguientes campos:
address
: La dirección que deseas geocodificar
o
location
: ElLatLng
(oLatLngLiteral
) para el que deseas obtener la dirección más cercana en lenguaje natural. El geocodificador realiza un proceso de geocodificación inversa. Consulta el artículo Geocodificación inversa para obtener más información.
o
placeId
: El ID de lugar del sitio para el que deseas obtener dirección más cercana en lenguaje natural. Obtén más información sobre cómo recuperar una dirección de un ID de lugar.
Parámetros opcionales:
bounds
: Es el elementoLatLngBounds
en el que establecen personalizaciones más prominentes para resultados de la geolocalización. El parámetrobounds
influye en los resultados del geocodificador, pero no los restringe por completo. A continuación, obtén más información sobre la personalización de viewports.componentRestrictions
: Se usa para restringir los resultados a un área específica. Obtén más información sobre el filtrado de componentes a continuación.region
: Es el código de región, especificado como una subetiqueta Unicode de región de dos caracteres (no numérica). En la mayoría de los casos, estas etiquetas se asignan directamente a valores conocidos de ccTLD ("dominio de nivel superior") de dos caracteres. El parámetroregion
influye en los resultados del geocodificador, pero no los restringe por completo. Obtén más información sobre la personalización del código regional a continuación.
Respuestas de Geocoding
El servicio Geocoding exige que se ejecute un método de devolución de llamada cuando se obtengan resultados del geocodificador. Esta devolución de llamada debe transmitir dos parámetros para conservar los códigos results
y status
, en ese orden.
Resultados de Geocoding
El objeto GeocoderResult
representa un solo resultado de la geocodificación. Una solicitud de geocódigo puede arrojar varios objetos como resultado:
results[]: { types[]: string, formatted_address: string, address_components[]: { short_name: string, long_name: string, postcode_localities[]: string, types[]: string }, partial_match: boolean, place_id: string, postcode_localities[]: string, geometry: { location: LatLng, location_type: GeocoderLocationType viewport: LatLngBounds, bounds: LatLngBounds } }
Estos campos se explican a continuación:
types[]
: Es un array que indica el tipo de dirección del resultado que se muestra. Este array contiene un grupo de cero o más etiquetas que identifican el tipo de función que se muestra en el resultado. Por ejemplo, un código geográfico de "Chicago" muestra la etiqueta "localidad", que indica que "Chicago" es una ciudad, y también "político", que indica que es una entidad política. Obtén más información sobre los tipos y componentes de dirección a continuación.formatted_address
: Es una string que contiene la dirección de esta ubicación en lenguaje natural.A menudo, esta dirección equivale a la "dirección postal". Ten en cuenta que, en algunos países, como los que integran el Reino Unido, no se permite la distribución de direcciones postales verdaderas debido a restricciones de licencia.
La dirección con formato está compuesta, de manera lógica, por uno o más componentes de dirección. Por ejemplo, la dirección "111 8th Avenue, New York, NY" consta de los siguientes componentes: "111" (número de la calle), "8th Avenue" (calle), "New York" (ciudad) y "NY" (estado de los EE.UU.).
No analices la dirección con formato de forma programática. En cambio, utiliza los componentes individuales de la dirección, que la respuesta de la API incluye además del campo de dirección con formato.
address_components[]
: Es un array que contiene los componentes independientes que se aplican a esta dirección.Por lo general, cada componente de la dirección incluye los siguientes campos:
types[]
: Es un array que indica el tipo de componente de la dirección. Consulta la lista de tipos admitidos.long_name
: Es la descripción textual completa o el nombre del componente de la dirección que muestra el geocodificador.short_name
: Es un nombre textual abreviado para el componente de la dirección, si está disponible. Por ejemplo, un componente de dirección para el estado de Alaska puede tener unlong_name
de "Alaska" y unshort_name
de "AK" con la abreviatura postal de 2 letras.
Ten en cuenta lo siguiente acerca del array
address_components[]
:- El array de componentes de dirección puede incluir más componentes que
formatted_address
. - El array no necesariamente incluye todas las entidades políticas que contienen una dirección, además de las incluidas en
formatted_address
. Para obtener datos sobre todas las entidades políticas que contienen una dirección específica, debes usar la geocodificación inversa, y pasar la latitud y la longitud de la dirección como parámetro a la solicitud. - No se garantiza que el formato de la respuesta permanezca igual entre las distintas solicitudes. En particular, la cantidad de
address_components
varía según la dirección solicitada y puede cambiar con el tiempo para la misma dirección. Un componente puede cambiar de posición en el array. El tipo de componente puede cambiar. Es posible que falte un componente en particular en una respuesta posterior.
Obtén más información sobre los tipos y componentes de dirección a continuación.
-
partial_match
: Indica que el geocodificador no mostró una concordancia exacta para la solicitud original, aunque sí encontró una coincidencia parcial para la dirección solicitada. Te recomendamos que examines la solicitud original para comprobar que no haya errores ortográficos o que la dirección no esté incompleta.Las coincidencias parciales generalmente ocurren cuando las direcciones no existen en la localidad que pasas en la solicitud. También se pueden obtener coincidencias parciales cuando una solicitud coincide con dos o más ubicaciones en la misma localidad. Por ejemplo, "Hillpar St, Bristol, UK" mostrará una coincidencia parcial tanto para Henry Street como para Henrietta Street. Ten en cuenta que, si una solicitud incluye un error ortográfico en un componente de la dirección, el servicio de geocodificación puede sugerir una dirección alternativa. Las sugerencias propuestas de esta manera también se marcarán como una coincidencia parcial.
place_id
es un identificador único de un lugar, que se puede usar con otras APIs de Google. Por ejemplo, puedes usar elplace_id
con la biblioteca de la API de Google Places para obtener detalles de una empresa local, como el número de teléfono, el horario de atención, opiniones de los usuarios y mucho más. Consulta la descripción general del ID de lugar.postcode_localities[]
: Es un array que denota todas las localidades incluidas en un código postal y solo aparece cuando el resultado es un código postal que contiene varias localidades.geometry
: Contiene la siguiente información:location
: Contiene los valores de latitud y longitud geocodificados. Ten en cuenta que esta ubicación se muestra como un objetoLatLng
, no como una string con formato.location_type
: Almacena datos adicionales sobre la ubicación especificada. Actualmente, se admiten los siguientes valores:ROOFTOP
: Indica que el resultado que se muestra refleja un código geográfico preciso.RANGE_INTERPOLATED
: Indica que el resultado que se muestra refleja una aproximación (generalmente en una ruta) interpolada entre dos puntos precisos (como intersecciones). Generalmente se muestran resultados interpolados cuando no se encuentran códigos geográficos exactos para una dirección.GEOMETRIC_CENTER
: Indica que el resultado que se muestra refleja el centro geométrico de un resultado, como una polilínea (por ejemplo, una calle) o un polígono (región).APPROXIMATE
: Indica que el resultado que se muestra es aproximado.
viewport
: Almacena el viewport recomendado para el resultado que se muestra.bounds
(opcional): Muestra elLatLngBounds
que puede contener por completo el resultado mostrado. Ten en cuenta que es probable que estos límites no coincidan con el viewport recomendado. (Por ejemplo, San Francisco incluye las Islas Farallón, que técnicamente son parte de la ciudad, pero no se deben mostrar en el viewport).
El geocodificador mostrará las direcciones con la configuración de idioma preferida del navegador o el idioma especificado al cargar la API de JavaScript con el parámetro language
. Para obtener más información, consulta Localización.
Tipos de dirección y tipos de componentes de dirección
El array types[]
en GeocoderResult indica el tipo de dirección. El array types[]
también se puede mostrar dentro de un GeocoderAddressComponent para indicar el tipo del componente de dirección particular. Las direcciones que muestra el geocodificador pueden ser de varios tipos, y los tipos se pueden considerar como etiquetas.
Por ejemplo, muchas ciudades están etiquetadas con los tipos political
y locality
.
El geocodificador admite y muestra los siguientes tipos de dirección y de componente de dirección:
street_address
: Indica una dirección precisa.route
: Indica una ruta con nombre (como "US 101").intersection
: Indica una intersección principal, generalmente de dos rutas principales.political
: Indica una entidad política. Generalmente, este tipo indica un polígono de alguna administración pública.country
: Indica la entidad política nacional y, por lo general, es el tipo de rango más alto que muestra el geocodificador.administrative_area_level_1
: Indica una entidad civil de primer rango por debajo del nivel de país. En Estados Unidos, estos niveles administrativos son los estados. No todos los países poseen estos niveles administrativos. En la mayoría de los casos, los nombres cortos de administrative_area_level_1 coincidirán considerablemente con las subdivisiones de ISO 3166-2 y otras listas conocidas; sin embargo, no podemos garantizarlo debido a que nuestros resultados de geocodificación están basados en diferentes indicadores y datos de ubicación.administrative_area_level_2
: Indica una entidad civil de segundo rango por debajo del nivel de país. En Estados Unidos, estos niveles administrativos son los condados. No todos los países poseen estos niveles administrativos.administrative_area_level_3
: Indica una entidad civil de tercer rango por debajo del nivel de país. Este tipo indica una división civil inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_4
: Indica una entidad civil de cuarto rango por debajo del nivel de país. Este tipo indica una división civil inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_5
: Indica una entidad civil de quinto rango por debajo del nivel de país. Este tipo indica una división civil inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_6
: Indica una entidad civil de sexto rango por debajo del nivel de país. Este tipo indica una división civil inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_7
: Indica una entidad civil de séptimo rango por debajo del nivel de país. Este tipo indica una división civil inferior. No todos los países poseen estos niveles administrativos.colloquial_area
: Indica un nombre alternativo de uso general para la entidad.locality
: Indica una entidad política integrada en una ciudad o un pueblo.sublocality
: Indica una entidad civil de primer rango por debajo de una localidad. Algunas ubicaciones pueden recibir uno de los tipos adicionales:sublocality_level_1
asublocality_level_5
. Cada nivel de sublocalidad es una entidad civil. Los números más altos indican áreas geográficas más pequeñas.neighborhood
: Indica un área residencial con nombre.premise
: Indica una ubicación determinada, generalmente un edificio o un conjunto de edificios con un nombre común.subpremise
: Indica una entidad de primer rango por debajo de una ubicación determinada, generalmente, un edificio único dentro de un conjunto de edificios con un nombre común.plus_code
: Indica una referencia de una ubicación codificada, derivada de las coordenadas de latitud y longitud. Los Plus Codes se pueden usar como reemplazo de las direcciones en los lugares donde estas no existen (donde los edificios no están numerados o las calles no tienen nombre). Consulta https://plus.codes para obtener más información.postal_code
: Indica un código postal, tal como se usa en las direcciones postales dentro del país.natural_feature
: Indica una formación natural destacada.airport
: Indica un aeropuerto.park
: Indica un parque determinado.point_of_interest
: Indica un lugar de interés determinado. Por lo general, estos "lugares de interés" son entidades locales destacadas que no concuerdan fácilmente con otras categorías, como "Edificio Empire State" o "Torre Eiffel".
Una lista vacía de tipos indica que no hay tipos conocidos para el componente de dirección específico, por ejemplo, Lieu-dit, en Francia.
Además de lo mencionado anteriormente, los componentes de dirección pueden incluir los siguientes tipos.
Nota: Esta lista no es exhaustiva y está sujeta a cambios.
floor
: Indica el piso de la dirección de un edificio.establishment
: Suele indicar un lugar que aún no se categorizó.landmark
: Indica un lugar cercano que se usa como referencia para facilitar la navegación.point_of_interest
: Indica un lugar de interés determinado.parking
: Indica un estacionamiento o una estructura de estacionamiento.post_box
: Indica una casilla de correo postal específica.postal_town
: Indica un grupo de áreas geográficas, comolocality
ysublocality
, que se usan para las direcciones de correo postal en algunos países.room
: Indica una sala en una dirección de un edificio.street_number
: Indica el número exacto de una calle.bus_station
,train_station
ytransit_station
: Indican la ubicación de una parada de autobús, tren o transporte público.
Códigos de estado
El código status
puede mostrar uno de los siguientes valores:
"OK"
: Indica que no se produjeron errores, es decir, que la dirección se analizó correctamente y arrojó al menos un código geográfico."ZERO_RESULTS"
indica que el código geográfico era correcto, pero no mostró resultados. Esto puede ocurrir si se pasó un valoraddress
inexistente al geocodificador."OVER_QUERY_LIMIT"
: Indica que superaste tu cuota."REQUEST_DENIED"
: Indica que se rechazó tu solicitud. La página web no tiene autorización para usar el geocodificador."INVALID_REQUEST"
: Suele indicar que falta la búsqueda (address
,components
olatlng
)."UNKNOWN_ERROR"
: Indica que no se pudo procesar la solicitud debido a un error del servidor. La solicitud puede ser exitosa si realizas un nuevo intento."ERROR"
: Indica que se agotó el tiempo de espera de la solicitud o que se produjo un problema al contactar a los servidores de Google. La solicitud puede ser exitosa si realizas un nuevo intento.
En este ejemplo, se aplica geocodificación a una dirección y se coloca un marcador a los valores de latitud y longitud que se muestran. Ten en cuenta que el controlador se pasa como un literal de función anónimo.
var geocoder; var map; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(-34.397, 150.644); var mapOptions = { zoom: 8, center: latlng } map = new google.maps.Map(document.getElementById('map'), mapOptions); } function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } <body onload="initialize()"> <div id="map" style="width: 320px; height: 480px;"></div> <div> <input id="address" type="textbox" value="Sydney, NSW"> <input type="button" value="Encode" onclick="codeAddress()"> </div> </body>
Personalización de viewports
También puedes dar instrucciones al servicio Geocoding para que de preferencia a los resultados dentro de un viewport determinado (expresado como un cuadro de límite). Para ello, configura el parámetro bounds
dentro del literal de objeto GeocoderRequest
a fin de definir los límites de este viewport. Ten en cuenta que la personalización solo da preferencia a los resultados dentro de los límites establecidos. Si existen resultados más relevantes fuera de estos límites, también es posible que se incluyan.
Por ejemplo, un código geográfico para "Winnetka" generalmente muestra este suburbio de Chicago:
{ "types":["locality","political"], "formatted_address":"Winnetka, IL, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["locality","political"] },{ "long_name":"Illinois", "short_name":"IL", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location":[ -87.7417070, 42.1083080], "location_type":"APPROXIMATE" }, "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q" }
Sin embargo, cuando se especifica un parámetro bounds
que define un cuadro delimitador para el Valle de San Fernando en Los Ángeles, se obtiene como resultado un código geográfico que muestra el área residencial "Winnetka" en esa ubicación:
{ "types":["sublocality","political"], "formatted_address":"Winnetka, California, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["sublocality","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_3","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_2","political"] },{ "long_name":"California", "short_name":"CA", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location": [34.213171,-118.571022], "location_type":"APPROXIMATE" }, "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ" }
Personalización de códigos regionales
Puedes configurar el servicio de geocodificación para que muestre resultados personalizados para una región particular si usas de manera explícita el parámetro region
. Este parámetro toma un código regional, que se indica como una subetiqueta regional Unicode de dos caracteres (no numérica). Estas etiquetas se asignan directamente a valores de ccTLD ("dominio de nivel superior") conocidos de dos caracteres, como "uk" en "co.uk". En algunos casos, la etiqueta region
también admite códigos ISO-3166-1, que a veces difieren de los valores ccTLD (por ejemplo, "GB" para "Gran Bretaña").
Cuando uses el parámetro region
, haz lo siguiente:
- Especifica solo un país o región. Los valores múltiples se ignoran y pueden ocasionar un error en la solicitud.
- Usa únicamente subetiquetas regionales de dos caracteres (formato CLDR de Unicode). Todas las demás entradas generarán errores.
- Solo se admiten los países y las regiones que figuran en los Detalles de cobertura de Google Maps Platform.
Se pueden enviar solicitudes de geocodificación para cada dominio en el cual la aplicación principal de Google Maps ofrece este servicio. Ten en cuenta que la personalización solo da preferencia a los resultados correspondientes a un dominio específico. Si existen resultados más relevantes fuera de este dominio, también es posible que se incluyan.
Por ejemplo, un geocódigo para "Toledo" muestra este resultado, ya que el dominio predeterminado para el servicio Geocoding se establece en Estados Unidos:
{ "types":["locality","political"], "formatted_address":"Toledo, OH, USA", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Ohio", "short_name":"OH", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw" }
Un geocódigo para "Toledo" con el campo region
establecido en 'es'
(España) mostrará la ciudad española:
{ "types":["locality","political"], "formatted_address":"Toledo, España", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Toledo", "short_name":"TO", "types":["administrative_area_level_2","political"] },{ "long_name":"Castilla-La Mancha", "short_name":"CM", "types":["administrative_area_level_1","political"] },{ "long_name":"España", "short_name":"ES", "types":["country","political"] }], "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y" }
Filtrado de componentes
Puedes configurar el servicio Geocoding para que muestre resultados de direcciones restringidos a un área específica mediante un filtro de componentes. Especifica el parámetro componentRestrictions
en el filtro. Los valores de filtros admiten los mismos métodos de corrección ortográfica y coincidencia parcial que otras solicitudes de geocodificación.
El geocodificador muestra solo los resultados que coinciden con todos los filtros de componentes. Esto significa que evalúa las especificaciones del filtro como AND, no como OR.
Un filtro de componentes consta de uno o más de los siguientes elementos:
route
: Establece coincidencias con el nombre largo o corto de una ruta.locality
: Establece coincidencias con los tipos de localidad y sublocalidad.administrativeArea
: Establece coincidencias con todos los niveles del área administrativa.postalCode
: Establece coincidencias con los códigos postales y los prefijos de códigos postales.country
: Establece coincidencias con un nombre de país o con un código de país ISO 3166-1 de dos letras. Nota: La API sigue el estándar ISO para definir los países, y el filtrado funciona mejor cuando se usa el código ISO correspondiente del país.
En el siguiente ejemplo, se indica cómo se debe utilizar el parámetro componentRestrictions
para filtrar por country
y postalCode
:
function codeAddress() { geocoder.geocode({ componentRestrictions: { country: 'AU', postalCode: '2000' } }, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
Geocodificación inversa (búsqueda de direcciones)
Por lo general, el término geocodificación hace referencia a la traducción de una dirección en lenguaje natural a una ubicación en un mapa. El proceso inverso, es decir, el de convertir una ubicación en el mapa en una dirección en lenguaje natural, se conoce como geocodificación inversa.
En lugar de proporcionar una address
textual, debes proporcionar un valor de latitud/longitud separado por comas en el parámetro location
.
En el siguiente ejemplo, se geocodifica un valor de latitud/longitud, se centra el mapa en dicha ubicación y se genera una ventana de información con la dirección con formato.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.731, lng: -73.997 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodeLatLng(geocoder, map, infowindow); } ); } function geocodeLatLng( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const input = (document.getElementById("latlng") as HTMLInputElement).value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.731, lng: -73.997 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodeLatLng(geocoder, map, infowindow); }); } function geocodeLatLng(geocoder, map, infowindow) { const input = document.getElementById("latlng").value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;
Prueba la muestra
Ten en cuenta que, en el ejemplo anterior, mostramos el primer resultado seleccionando results[0]
. El geocodificador inverso a menudo muestra más de un resultado. Las "direcciones" no representan solo direcciones postales, sino cualquier forma de asignar nombres geográficos a una ubicación. Por ejemplo, al aplicarse geocodificación a un punto en la ciudad de Chicago, dicho punto puede etiquetarse como una dirección, como la ciudad (Chicago), como el estado (Illinois) o como un país (Estados Unidos). Todas las direcciones corresponden al geocodificador. El geocodificador inverso muestra todos estos resultados.
El geocodificador inverso establece coincidencias con entidades políticas (países, provincias, ciudades y áreas residenciales), direcciones y códigos postales.
En este ejemplo, se muestra la lista de direcciones que podría arrojar la consulta anterior:
results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA" results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA" results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA" results[3].formatted_address: "Brooklyn, NY, USA" results[4].formatted_address: "New York, NY, USA" results[5].formatted_address: "Brooklyn, NY 11211, USA" results[6].formatted_address: "Kings County, NY, USA" results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA" results[8].formatted_address: "New York Metropolitan Area, USA" results[9].formatted_address: "New York, USA"
Las direcciones se muestran de mayor a menor coincidencia. En general, la dirección más exacta es el resultado más prominente, como en este caso.
Ten en cuenta que se muestran diferentes tipos de direcciones, desde la dirección más específica hasta entidades políticas menos específicas, como áreas residenciales, ciudades, condados, estados, etc. Si deseas buscar coincidencias con una dirección más general, te recomendamos que inspecciones el campo results[].types
.
Nota: La geocodificación inversa no es una ciencia exacta. El geocodificador intentará encontrar la ubicación localizable más cercana dentro de una tolerancia determinada.
Cómo obtener una dirección para un ID de lugar
Proporciona un placeId
para encontrar la dirección de un ID de lugar determinado. El ID de lugar es un identificador único que puede usarse con otras APIs de Google. Por ejemplo, puedes proporcionar el placeId
que muestra la API de Roads para obtener la dirección de un punto ajustado. Para obtener más información sobre los IDs de lugar, consulta la descripción general de los ID de lugar.
Cuando proporcionas un placeId
, la solicitud no puede contener ninguno de los siguientes campos:
address
latLng
location
componentRestrictions
En el siguiente ejemplo, se acepta un ID de lugar, se encuentra la dirección correspondiente y se centra el mapa en esa ubicación. También se genera una ventana de información en la que se muestra la dirección con formato del lugar correspondiente:
TypeScript
// Initialize the map. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.72, lng: -73.96 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodePlaceId(geocoder, map, infowindow); } ); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const placeId = (document.getElementById("place-id") as HTMLInputElement) .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// Initialize the map. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.72, lng: -73.96 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodePlaceId(geocoder, map, infowindow); }); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId(geocoder, map, infowindow) { const placeId = document.getElementById("place-id").value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;