Solicitud y respuesta de 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 de hacer lo contrario, es decir, convertir una ubicación en el mapa en una dirección legible por humanos, se conoce como codificación geográfica inversa.

Solicitudes de geocodificación inversa

Parámetros obligatorios

  • latlng: Son las coordenadas de latitud y longitud que especifican la ubicación para la que deseas obtener la dirección más cercana legible por humanos.
  • key: Es la clave de API de tu aplicación. Esta clave identifica tu aplicación para la administración de cuotas. Obtén más información para obtener una clave.

Parámetros opcionales

Estos son los parámetros opcionales que puedes incluir en una solicitud de geocodificación inversa:

  • language: Es el idioma en el que se mostrarán los resultados.
    • Consulta la lista de idiomas compatibles. Google actualiza con frecuencia los idiomas admitidos, por lo que es posible que esta lista no sea exhaustiva.
    • Si no se proporciona language, el geocodificador intenta usar el idioma preferido como se especifica en el encabezado Accept-Language o el idioma nativo del dominio desde el que se envía la solicitud.
    • El geocodificador hace todo lo posible para proporcionar una dirección que sea legible para el usuario y los locales. Para lograr ese objetivo, muestra las direcciones en el idioma local, transliteradas a una secuencia de comandos que el usuario puede leer si es necesario, y respeta el idioma preferido. Todas las demás direcciones se muestran en el idioma preferido. Todos los componentes de la dirección se muestran en el mismo idioma, que se elige en el primer componente.
    • Si un nombre no está disponible en el idioma preferido, el geocodificador usa la coincidencia más cercana.
  • region: Es el código de región, especificado como un valor ccTLD ("dominio de nivel superior") de dos caracteres. El parámetro también puede afectar los resultados según la ley aplicable.
  • result_type: Es un filtro de uno o más tipos de direcciones, separados por una barra (|). Si el parámetro contiene varios tipos de direcciones, la API muestra todas las direcciones que coinciden con cualquiera de los tipos. Nota sobre el procesamiento: El parámetro result_type no restringe la búsqueda a los tipos de direcciones especificados. En cambio, result_type actúa como un filtro posterior a la búsqueda: la API recupera todos los resultados de la latlng especificada y, luego, descarta aquellos que no coinciden con los tipos de dirección especificados. Se admiten los siguientes valores:
    • 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 adicionales sublocality_level_1 a sublocality_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 área residencial con nombre.
    • premise indica una ubicación designada, generalmente un edificio o un conjunto de edificios con un nombre común.
    • subpremise indica una entidad direccionable por debajo del nivel de la premisa, como un departamento, una unidad o una suite.
    • 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".
  • location_type: Es un filtro de uno o más tipos de ubicación, separados por una barra (|). Si el parámetro contiene varios tipos de ubicación, la API muestra todas las direcciones que coinciden con cualquiera de los tipos. Nota sobre el procesamiento: El parámetro location_type no restringe la búsqueda a los tipos de ubicación especificados. En cambio, location_type actúa como un filtro posterior a la búsqueda: la API recupera todos los resultados de la latlng especificada y, luego, descarta aquellos que no coinciden con los tipos de ubicación especificados. Se admiten los siguientes valores:
    • "ROOFTOP" muestra solo las direcciones para las que Google tiene información de ubicación precisa hasta la precisión de la dirección.
    • "RANGE_INTERPOLATED" muestra solo las direcciones que reflejan una aproximación (por lo general, en una ruta) interpolada entre dos puntos precisos (como intersecciones). Por lo general, un rango interpolado indica que los geocódigos de techos no están disponibles para una dirección.
    • "GEOMETRIC_CENTER" solo muestra los centros geométricos de una ubicación, como una polilínea (por ejemplo, una calle) o un polígono (región).
    • "APPROXIMATE" muestra solo las direcciones que se caracterizan como aproximadas.
  • extra_computations: Usa este parámetro para especificar las siguientes funciones adicionales en la respuesta: Para habilitar varias de estas funciones para la misma solicitud a la API, incluye el parámetro extra_computations en la solicitud de cada función, por ejemplo:
    extra_computations=ADDRESS_DESCRIPTORS&extra_computations=BUILDING_AND_ENTRANCES

Si están presentes los filtros result_type y location_type, la API solo muestra los resultados que coinciden con los valores de result_type y location_type. Si ninguno de los valores del filtro es aceptable, la API muestra ZERO_RESULTS.

Ejemplo de geocodificación inversa

La siguiente consulta contiene el valor de latitud/longitud para una ubicación en Brooklyn:

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY

La consulta anterior devuelve el siguiente resultado:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "277",
               "short_name" : "277",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Bedford Avenue",
               "short_name" : "Bedford Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Williamsburg",
               "short_name" : "Williamsburg",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Brooklyn",
               "short_name" : "Brooklyn",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "Kings",
               "short_name" : "Kings",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "NY",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "11211",
               "short_name" : "11211",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "277 Bedford Avenue, Brooklyn, NY 11211, USA",
         "geometry" : {
            "location" : {
               "lat" : 40.714232,
               "lng" : -73.9612889
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 40.7155809802915,
                  "lng" : -73.9599399197085
               },
               "southwest" : {
                  "lat" : 40.7128830197085,
                  "lng" : -73.96263788029151
               }
            }
         },
         "place_id" : "ChIJd8BlQ2BZwokRAFUEcm_qrcA",
         "types" : [ "street_address" ]
      },

  ... Additional <code>results[]</code> ...

Ten en cuenta que el geocodificador inverso devolvió más de un resultado. Los resultados de "formatted_address" no solo son direcciones postales, sino cualquier forma de nombrar geográficamente una ubicación. Por ejemplo, cuando se geocodifica un punto en la ciudad de Chicago, el punto geocodificado se puede indicar como una dirección, la ciudad (Chicago), el estado (Illinois) o el país (Estados Unidos). Todas son "direcciones" para el geocodificador. El geocodificador inverso muestra cualquiera de estos tipos como resultados válidos.

El geocodificador inverso busca coincidencias entre entidades políticas (países, provincias, ciudades y vecindarios), direcciones y códigos postales.

A continuación, se muestra la lista completa de los valores de formatted_address que muestra la consulta anterior.

{
   "plus_code" : {
      "compound_code" : "P27Q+MCM New York, NY, USA",
      "global_code" : "87G8P27Q+MCM"
   },
   "results" : [
      {
         "formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "street_address" ]
      },
      {
         "formatted_address" : "279 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "premise" ]
      },
      {
         "formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "establishment", "point_of_interest" ]
      },
      {
         "formatted_address" : "291-275 Bedford Ave, Brooklyn, NY 11211, USA",
         ...
         "types" : [ "route" ]
      },
      {
         "formatted_address" : "P27Q+MC New York, NY, USA",
         ...
         "types" : [ "plus_code" ]
      },
      {
         "formatted_address" : "South Williamsburg, Brooklyn, NY, USA",
         ...
         "types" : [ "neighborhood", "political" ]
      },
      {
         "formatted_address" : "Brooklyn, NY 11211, USA",
         ...
         "types" : [ "postal_code" ]
      },
      {
         "formatted_address" : "Williamsburg, Brooklyn, NY, USA",
         ...
         "types" : [ "neighborhood", "political" ]
      },
      {
         "formatted_address" : "Kings County, Brooklyn, NY, USA",
         ...
         "types" : [ "administrative_area_level_2", "political" ]
      },
      {
         "formatted_address" : "Brooklyn, NY, USA",
         ...
         "types" : [ "political", "sublocality", "sublocality_level_1" ]
      },
      {
         "formatted_address" : "New York, NY, USA",
         ...
         "types" : [ "locality", "political" ]
      },
      {
         "formatted_address" : "New York, USA",
         ...
         "types" : [ "administrative_area_level_1", "political" ]
      },
      {
         "formatted_address" : "United States",
         ...
         "types" : [ "country", "political" ]
      }
   ],
   "status" : "OK"
}

Esta API muestra diferentes tipos de direcciones, desde la dirección más específica hasta entidades políticas menos específicas, como vecindarios, ciudades, condados y estados. En general, la dirección más exacta es el resultado más prominente, como en este caso. Si deseas hacer coincidir un tipo de dirección específico, consulta la siguiente sección sobre cómo restringir los resultados por tipo. Debido a esto, la ubicación de los resultados en relación con los demás puede variar.

Geocodificación inversa filtrada por tipo

En el siguiente ejemplo, se filtran las direcciones que se muestran para incluir solo aquellas con un tipo de ubicación de ROOFTOP y un tipo de dirección de street_address.

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452
&location_type=ROOFTOP&result_type=street_address&key=YOUR_API_KEY

Nota: Estos filtros solo son válidos para la geocodificación inversa.

Respuestas de la geocodificación inversa

El formato de la respuesta de la geocodificación inversa es el mismo que el de la respuesta de la geocodificación. Consulta Respuestas de geocodificación. A continuación se indican los códigos de estado posibles en una respuesta de geocodificación inversa.

Códigos de estado de la geocodificación inversa

El campo "status" dentro del objeto de respuesta de Geocoding contiene el estado de la solicitud y puede contener información de depuración para ayudarte a identificar el motivo por el que no funciona la codificación geográfica inversa. El campo "status" puede contener los siguientes valores:

  • "OK" indica que no se produjeron errores y que se mostró al menos una dirección.
  • "ZERO_RESULTS" indica que la geocodificación inversa se realizó correctamente, pero no mostró resultados. Esto puede ocurrir si se pasó un latlng al geocodificador en una ubicación remota.
  • "OVER_QUERY_LIMIT" indica que superaste tu cuota.
  • "REQUEST_DENIED" indica que se rechazó la solicitud. Es posible que se deba a que la solicitud incluye un parámetro result_type o location_type, pero no incluye una clave de API.
  • Por lo general, "INVALID_REQUEST" indica una de las siguientes opciones:
    • Falta la consulta (address, components o latlng).
    • Se proporcionó un result_type o location_type no válido.
  • "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.

Geocodificación inversa de Plus Codes

El campo plus_code dentro de la respuesta de geocodificación contiene un código plus que se aproxima mejor a la latitud y longitud consultadas. Además, en la mayoría de los casos, el array de resultados JSON contiene un resultado de geocodificación completo con un tipo plus_code y una dirección que contiene un código plus. Se garantiza que la distancia entre el código plus decodificado y el punto de solicitud sea inferior a 10 metros.