Descripción general
La geocodificación es el proceso que convierte 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 legibles por humanos (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 Geocoder que permite realizar la geocodificación y la geocodificación 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 Geocoding 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 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 mostrar más de un resultado.
Puedes acceder al servicio Geocoding de la API de Google Maps dentro de tu código mediante el objeto constructor google.maps.Geocoder
. El método Geocoder.geocode()
inicia una solicitud dirigida al servicio Geocoding 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 proporcionar solo uno de los siguientes campos:
address
: Indica la dirección que deseas geocodificar.
o
location
: Indica elLatLng
(oLatLngLiteral
) para el que deseas obtener la dirección más cercana legible por humanos. El geocodificador ejecuta un geocódigo inverso. Consulta Geocodificación inversa para obtener más información.
o
placeId
: Indica el ID de lugar del sitio para el que deseas obtener la dirección más cercana legible por humanos. 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 se personalizan resultados de geocódigos de forma más prominente. El parámetrobounds
afecta a los resultados del geocodificador, pero no los restringe por completo. A continuación, puedes consultar 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 regional, que se indica mediante una subetiqueta regional Unicode de dos caracteres (no numéricos). En la mayoría de los casos, estas etiquetas se asignan directamente a valores de ccTLD ("dominio de nivel superior") conocidos de dos caracteres. El parámetroregion
afecta 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 pasar dos parámetros para contener results
y el código status
, en ese orden.
Resultados de Geocoding
El objeto GeocoderResult
representa un solo resultado de la geocodificación. Una solicitud de geocódigo puede mostrar varios objetos de 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 incluye un conjunto de cero o varias etiquetas que identifican el tipo de componente que se muestra en el resultado. Por ejemplo, un geocódigo de "Chicago" muestra la etiqueta "localidad", que indica que "Chicago" es una ciudad, y también "política", que indica que es una entidad política. Obtén más información sobre los tipos de dirección y los componentes de las direcciones a continuación.formatted_address
es una cadena que contiene la dirección legible por humanos de esta ubicación.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 por vía 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 de dirección y los componentes de las direcciones 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 y que la dirección no esté incompleta.Las coincidencias parciales generalmente ocurren cuando las direcciones que se pasan en la solicitud no existen en la localidad. También se pueden mostrar coincidencias parciales cuando una solicitud concuerda 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 una dirección con un componente que contiene errores ortográficos, 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, las 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 cadena 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 geocódigo 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 devuelven resultados interpolados cuando no se encuentran geocódigos exactos disponibles 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
(se muestra de manera opcional) abarca elLatLngBounds
que puede contener por completo el resultado mostrado. Ten en cuenta que estos límites podrían no coincidir 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 el artículo 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, los cuales 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 en las clases de dirección y de componente de dirección:
street_address
indica una dirección precisa.route
indica una ruta designada (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 orden más alto que muestra el geocodificador.administrative_area_level_1
indica una entidad pública de primer orden 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 se basan en diferentes indicadores y datos de ubicación.administrative_area_level_2
indica una entidad pública de segundo orden 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 pública de tercer orden por debajo del nivel de país. Este tipo indica una división política inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_4
indica una entidad pública de cuarto orden por debajo del nivel de país. Este tipo indica una división política inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_5
indica una entidad pública de quinto orden por debajo del nivel de país. Este tipo indica una división política inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_6
indica una entidad pública de sexto orden por debajo del nivel de país. Este tipo indica una división política inferior. No todos los países poseen estos niveles administrativos.administrative_area_level_7
indica una entidad pública de séptimo orden por debajo del nivel de país. Este tipo indica una división política 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 constituida como ciudad o pueblo.sublocality
indica una entidad pública de primer orden por debajo de una localidad. Algunas ubicaciones pueden recibir uno de los tipos adicionalessublocality_level_1
asublocality_level_5
. Cada nivel de sublocalidad es una entidad pública. Los números más altos indican un área geográfica más pequeña.neighborhood
indica un vecindario designado.premise
indica una ubicación designada, generalmente un edificio o un conjunto de edificios con un nombre común.subpremise
indica una entidad de primer orden por debajo de una ubicación designada, generalmente, un edificio único dentro de un conjunto de edificios con un nombre común.plus_code
indica una referencia de ubicación codificada, derivada de la latitud y la 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). Visita https://plus.codes para obtener más información.postal_code
indica un código postal, tal como se usa para identificar una dirección de correo postal dentro del país.natural_feature
indica un componente natural destacado.airport
indica un aeropuerto.park
indica un parque designado.point_of_interest
indica un lugar de interés designado. Por lo general, estos "lugares de interés" son entidades locales destacadas que no encajan con facilidad en 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 dicho antes, 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 designado.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 habitación 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 mostró al menos un geocódigo."ZERO_RESULTS"
indica que el geocódigo 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 permitido usar el geocodificador."INVALID_REQUEST"
suele indicar que falta la consulta (address
,components
olatlng
)."UNKNOWN_ERROR"
indica que no se pudo procesar la solicitud debido a un error del servidor. La solicitud podría completarse con éxito 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 podría completarse con éxito si realizas un nuevo intento.
En este ejemplo, se geocodifica una dirección y se coloca un marcador a los valores de latitud y longitud mostrados. 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 anteponga ciertos resultados dentro de un viewport determinado (expresado como un cuadro delimitador). Para ello, configura el parámetro bounds
dentro del literal de objeto GeocoderRequest
para definir los límites de este viewport. Ten en cuenta que la personalización solo antepone los resultados dentro de los límites establecidos. Si existen más resultados relevantes fuera de estos límites, también es posible que se incluyan.
Por ejemplo, un geocódigo de “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 geocódigo que muestra el vecindario "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 Geocoding explícitamente para que muestre resultados personalizados para una región en particular mediante el parámetro region
. Este parámetro toma un código de región, que se indica como una subetiqueta de región 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 de ccTLD (por ejemplo, "GB" para "Gran Bretaña").
Cuando uses el parámetro region
, haz lo siguiente:
- Solo especifica un país o una región. Los valores múltiples se ignoran y pueden generar errores en la solicitud.
- Usa solo 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 todos los dominios en los que la aplicación principal de Google Maps ofrece geocodificación. Ten en cuenta que la personalización solo antepone los resultados correspondientes a un dominio específico. Si hay más resultados relevantes fuera de este dominio, es posible que también se incluyan.
Por ejemplo, un geocódigo de "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 de "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 filtro en el parámetro
componentRestrictions
. 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 un operador Y, no como un operador O.
Un filtro de componentes consta de uno o varios de los siguientes elementos:
route
establece coincidencias con el nombre largo o corto de una calle.locality
establece coincidencias con los tipos de localidad y sublocalidad.administrativeArea
establece coincidencias con todos los niveles de á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 muestra cómo usar 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)
El término geocodificación generalmente hace referencia a la conversión de una dirección legible por humanos en una ubicación en un mapa. El proceso inverso, es decir, de convertir una ubicación en el mapa en una dirección legible por humanos, se conoce como geocodificación inversa.
En lugar de proporcionar un elemento address
textual, debes proporcionar el valor de latitud y longitud, separado por comas, en el parámetro location
.
En el siguiente ejemplo, se geocodifica un valor de latitud y longitud, se centra el mapa en la ubicación correspondiente y se abre una ventana de información que incluye 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, se mostró el primer resultado seleccionando results[0]
. El geocodificador inverso a menudo muestra más de un resultado. Las direcciones geocodificadas no solo representan direcciones postales, sino que permiten hacer referencia a cualquier ubicación geográfica. Por ejemplo, cuando se geocodifica un punto en la ciudad de Chicago, dicha ubicación puede etiquetarse como una dirección, como una ciudad (Chicago), como un estado (Illinois) o como un país (Estados Unidos). Todas las direcciones corresponden al geocodificador. El geocodificador inverso muestra todos estos resultados.
La geocodificación inversa establece coincidencias con entidades políticas (países, provincias, ciudades y vecindarios), direcciones y códigos postales.
A continuación, se muestra un ejemplo de la lista de direcciones que puede mostrar 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 en orden 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 vecindarios, 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á hallar 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 una dirección de un ID de lugar determinado. El ID de lugar es un identificador único que se puede usar 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 IDs 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 relevante:
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;