Eso es todo.

Para comenzar a desarrollar, consulta nuestra documentación para desarrolladores.

Activar la Google Maps JavaScript API

Para que puedas comenzar, te proporcionaremos orientación en la Google Developers Console a fin de que hagas primero algunas acciones:

  1. Crear o seleccionar un proyecto
  2. Activar la Google Maps JavaScript API y servicios relacionados
  3. Crear claves correspondientes
Continuar

Servicio de geocodificación

Informació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 disponer marcadores o posicionar el mapa.

La geocodificación inversa es el proceso de conversión de coordenadas geográficas en direcciones en lenguaje natural. El geocodificador inverso también te permite hallar la dirección correspondiente a un id. de sitio determinado.

La Google Maps JavaScript API proporciona una clase de geocodificador para aplicar geocodificación convencional e inversa de manera dinámica a partir de entradas del usuario. Si deseas aplicar geocodificación a direcciones estáticas conocidas, consulta el servicio web de geocodificación.

Primeros pasos

Antes de usar el servicio de geocodificación de la Google Maps JavaScript API, debes asegurarte de que la Google Maps Geocoding API esté habilitada en la Google API Console, en el mismo proyecto que configuraste para la Google Maps JavaScript API.

Para ver tu lista de API habilitadas:

  1. Ingresa a Google API Console.
  2. Haz clic en el botón Select a project, luego selecciona el mismo proyecto que configuraste para la Google Maps JavaScript API y haz clic en Open.
  3. En la lista de API del Panel de control, busca Google Maps Geocoding API.
  4. Si ves la API en la lista, no necesitas hacer nada más. Si la API no está en la lista, habilítala:
    1. En la parte superior de la página, selecciona ENABLE API para mostrar la pestaña Library. Como alternativa, en el menú lateral izquierdo, selecciona Library.
    2. Busca Google Maps Geocoding API y luego selecciónala en la lista de resultados.
    3. Selecciona ENABLE. Cuando finalice el proceso, Google Maps Geocoding API aparecerá en la lista de API del Panel de control.

Límites y políticas de uso

Cuotas

Los siguientes límites de uso se encuentran en vigencia para el servicio de geocodificación:

Uso del servicio de geocodificación con el plan estándar

  • 2500 solicitudes gratis por día, calculadas como la suma de las consultas del cliente y el servidor; habilitar facturación para acceder a las cuotas diarias por un costo de USD 0,50 cada 1000 solicitudes adicionales, hasta 100 000 solicitudes diarias.
  • 50 solicitudes por segundo, calculadas como la suma de las consultas del cliente y el servidor.

Uso del servicio de geocodificación con el plan premium

  • Cuota gratuita diaria compartida de 100 000 solicitudes cada 24 horas; las solicitudes adicionales se cargarán a la compra anual de créditos de Maps API..
  • Ilimitado solicitudes del cliente por segundo, por proyecto. Ten en cuenta que la API del servidor tiene una cantidad límite de 50 solicitudes por segundo.

El límite de índice se aplica por sesión de usuario, independientemente de la cantidad de usuarios que compartan el mismo proyecto.

El límite de índice por sesión evita el uso de servicios del cliente para solicitudes por lotes, como la aplicación de geocodificación por lotes. Para las solicitudes por lotes, usa el servicio web de Google Maps Geocoding API.

Políticas

El uso del servicio de geocodificación debe cumplir con las políticas que se describen para la Google Maps Geocoding API.

Solicitudes de geocodificación

El acceso al servicio de geocodificación es asincrónico, ya que la Google Maps API debe realizar una llamada a un servidor externo. Por esta razón, debes pasar un método callback para la ejecución al completarse la solicitud. Este método callback procesa los resultados. Ten en cuenta que el geocodificador puede devolver más de un resultado.

Puedes acceder al servicio de geocodificación de la Google Maps API dentro de tu código a través del objeto google.maps.Geocoder. El método Geocoder.geocode() inicia una solicitud dirigida al servicio de geocodificación y pasarle un literal de objeto GeocoderRequest que contenga los términos introducidos y un método callback para la ejecución 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 uno, y solo uno, de los siguientes campos:

  • dirección: dirección que deseas geocodificar.
  • location: objeto LatLng (o LatLngLiteral) para el cual desees obtener la dirección más aproximada en lenguaje natural. El geocodificador aplica un geocódigo inverso. Para obtener más información, consulta Geocodificación inversa.
  • placeId: id. de sitio del sitio para el cual desees obtener la dirección más aproximada en lenguaje natural. El id. de sitio es un identificador único que puede usarse con otras API de Google. Por ejemplo, puedes usar el placeId devuelto por la Google Maps Roads API para obtener la dirección de un punto ajustado. Para obtener más información sobre los id. de sitio, consulta la información general sobre id. de sitio. Si pasas un campo placeId, el geocodificador aplica un geocódigo inverso. Para obtener más información, consulta Geocodificación inversa.

Parámetros opcionales:

  • bounds: objeto LatLngBounds dentro del cual se restringirán geocódigos de manera más prominente. El parámetro bounds solo tendrá efecto en los resultados del geocodificador, no los restringirá por completo. (Para obtener más información, consulta Restricción de viewports a continuación).
  • componentRestrictions: se usa para restringir resultados conforme a un área específica. (Para obtener más información, consulta Filtración de componentes a continuación).
  • region: código de región, especificado como una subetiqueta region en lenguaje IANA. En la mayoría de los casos, estas etiquetas realizan asignaciones directas a valores de ccTLD (“dominio de nivel superior”) conocidos de dos caracteres. El parámetro region solo tendrá efecto en los resultados del geocodificador, no los restringirá por completo. (Para obtener más información, consulta Restricción de códigos por región a continuación).

Respuestas de geocodificación

El servicio de geocodificación exige que se ejecute un método callback al recuperarse resultados del geocodificador. Este callback debe pasar dos parámetros para contener results y un código status, en este orden.

Resultados de geocodificación

El objeto GeocoderResult representa un solo resultado de geocodificación. Una solicitud de geocódigo puede devolver varios objetos de resultados:

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 conjunto que indica el tipo del resultado devuelto. Esta matriz contiene un grupo de cero o más etiquetas que identifican el tipo de función devuelto en el resultado. Por ejemplo, para un geocódigo “Chicago” se devuelve “localidad”, que indica que “Chicago” es una ciudad, también se devuelve “político”; esto indica que se trata de una entidad política.
  • formatted_address es una cadena que contiene la dirección de la ubicación en lenguaje natural. A menudo, esa dirección equivale a la "dirección postal" que suele diferir según el país. (Ten en cuenta que en algunos países, como los que integran Gran Bretaña, no se permite la distribución de direcciones postales verdaderas debido a restricciones de licencia). Esta dirección generalmente está compuesta por uno o más componentes de dirección. Por ejemplo, la dirección "111 8th Avenue, New York, NY" contiene componentes de dirección independientes para “111 8th Avenue" (una dirección), “New York” (la ciudad) y “NY” (el estado de EE. UU.). Estos componentes de dirección se exhiben abajo. (Para obtener más información sobre los tipos, consulta Tipos a continuación.
  • address_components[] es una matriz que contiene los componentes de dirección independientes, según lo explicado antes.
  • partial_match indica que el geocodificador no devolvió una coincidencia exacta para la solicitud original, aunque sí pudo establecer 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 pasaste en la solicitud no existen en la localidad. También se pueden devolver coincidencias parciales cuando una solicitud coincide con dos o más ubicaciones en la misma localidad. Por ejemplo, "21 Henr St, Bristol, UK" devolverá una coincidencia parcial para Henry Street y 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 para un sitio, que puede usarse con otras API de Google. Por ejemplo, puedes usar place_id con la biblioteca de laGoogle Places API para obtener información detallada de un negocio local, como un número de teléfono, el horario de apertura, reseñas de usuarios y más. Consulta la información general sobre id. de sitio.
  • postcode_localities[] es una matriz que denota todas las localidades que comprende un código postal. Esto solo se presenta cuando el resultado es un código postal que contiene varias localidades.
  • geometry contiene la siguiente información:

    • location contiene el valor de latitud y longitud geocodificado. Ten en cuenta que esta ubicación se devuelve como un objeto LatLng, no como una cadena con formato.
    • location_type almacena datos adicionales sobre la ubicación especificada. 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 calle) interpolada entre dos puntos precisos (como intersecciones). Generalmente se devuelven resultados interpolados cuando no se encuentran disponibles geocódigos exactos para una dirección.
      • GEOMETRIC_CENTER indica que el resultado que se muestra es 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 devuelto.
    • bounds (devolución opcional) almacena el objeto LatLngBounds que puede contener por completo el resultado devuelto. Ten en cuenta que probablemente estos límites no coincidan con el viewport recomendado. (Por ejemplo, San Francisco incluye los Farallones, que técnicamente son parte de la ciudad, pero no se devolverán en el viewport).

El geocodificador devolverá direcciones con la configuración de idioma preferida del navegador o el idioma especificado al cargar el código de JavaScript de la API mediante el parámetro language. (Para obtener más información, consulta Localización).

Tipos de componentes de dirección

El conjunto types[] dentro del resultado devuelto indica el tipo de dirección. Estos tipos también pueden devolverse dentro de conjuntos address_components[] para indicar el tipo del componente de dirección determinado. Las direcciones del geocodificador pueden ser de varios tipos y los tipos pueden considerarse como “etiquetas”. Por ejemplo, muchas ciudades reciben etiquetas con los tipos political y locality.

El geocodificador HTTP admite y devuelve los siguientes tipos:

  • street_address indica una dirección exacta.
  • route indica la denominación de una carretera (como "US 101").
  • intersection indica una intersección principal, generalmente de dos calles importantes.
  • 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 es generalmente el tipo de orden más alto que devuelve el geocodificador.
  • administrative_area_level_1 indica una entidad civil 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.
  • administrative_area_level_2 indica una entidad civil 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 civil de tercer orden 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 orden 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 orden 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 frecuente para la entidad.
  • locality indica una entidad política constituida de una ciudad o un pueblo.
  • sublocality indica una entidad civil 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 civil. Los números más altos indican un área geográfica más pequeña.
  • neighborhood indica un barrio con nombre.
  • premise indica una ubicación determinada, generalmente un edificio o un conjunto de edificios con un nombre en común.
  • subpremise indica una entidad de primer orden por debajo de una ubicación con nombre; generalmente un edificio individual de un conjunto de edificios con un nombre comú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 una atracción natural destacada.
  • airport indica un aeropuerto.
  • park indica un parque determinado.

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 exhibir los siguientes tipos:

  • post_box indica una casilla de correo específica.
  • street_number indica el número exacto de una calle.
  • floor indica el piso en la dirección de un edificio.
  • room indica una sala en la dirección de un edificio.

Códigos de estado

El código status puede devolver uno de los siguientes valores:

  • "OK" indica que no ocurrieron errores, que la dirección se analizó correctamente y que se devolvió al menos un geocódigo.
  • ZERO_RESULTS indica que el geocódigo fue exitoso, pero no devolvió resultados. Esto puede ocurrir si se pasa un valor address inexistente al geocodificador.
  • "OVER_QUERY_LIMIT" indica que excediste tu cuota.
  • "REQUEST_DENIED" indica que se rechazó tu solicitud.
  • "INVALID_REQUEST" generalmente indica que falta la consulta (address, components o latlng).
  • "UNKNOWN_ERROR" indica que no se pudo procesar la solicitud por un error en el servidor. La solicitud puede tener éxito 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 latitudo y longitud devueltos. 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>

Ver el ejemplo (geocoding-simple.html)

Geocodificación inversa (búsqueda de direcciones)

El término geocodificación generalmente hace referencia a la conversión de una dirección en lenguaje natural en una ubicación de un mapa. El proceso de hacer lo inverso, de convertir una ubicación del mapa en una dirección en lenguaje natural, se conoce como geocodificación inversa.

Geocoder admite geocodificación inversa de manera directa. En lugar de proporcionar un parámetro textual address, brinda un par de latitud o longitud separado por comas en el parámetro location. Como alternativa, proporciona un campo placeId para hallar la dirección correspondiente a un id. de sitio determinado.

Geocodificación inversa por ubicación

En el ejemplo siguiente se aplica geocodificación a un valor de latitud y longitud, se centra el mapa en dicha ubicación y se genera una ventana de información con la dirección sometida a formateo. Se devuelve el segundo resultado, que es menos específico que el primero (en este caso, el nombre de un vecindario).

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.731, lng: -73.997}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodeLatLng(geocoder, map, infowindow);
  });
}

function geocodeLatLng(geocoder, map, infowindow) {
  var input = document.getElementById('latlng').value;
  var latlngStr = input.split(',', 2);
  var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
  geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === 'OK') {
      if (results[1]) {
        map.setZoom(11);
        var marker = new google.maps.Marker({
          position: latlng,
          map: map
        });
        infowindow.setContent(results[1].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}
<div id="floating-panel">
  <input id="latlng" type="text" value="40.714224,-73.961452">
  <input id="submit" type="button" value="Reverse Geocode">
</div>
<div id="map"></div>
/* 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;
}
#floating-panel {
  position: absolute;
  top: 10px;
  left: 25%;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
  text-align: center;
  font-family: 'Roboto','sans-serif';
  line-height: 30px;
  padding-left: 10px;
}
#floating-panel {
  position: absolute;
  top: 5px;
  left: 50%;
  margin-left: -180px;
  width: 350px;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
}
#latlng {
  width: 225px;
}
 <!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.731, lng: -73.997}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodeLatLng(geocoder, map, infowindow);
  });
}

function geocodeLatLng(geocoder, map, infowindow) {
  var input = document.getElementById('latlng').value;
  var latlngStr = input.split(',', 2);
  var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
  geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === 'OK') {
      if (results[1]) {
        map.setZoom(11);
        var marker = new google.maps.Marker({
          position: latlng,
          map: map
        });
        infowindow.setContent(results[1].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}

Ver el ejemplo (geocoding-reverse.html).

Ten en cuenta que en el ejemplo anterior se mostró el segundo resultado (seleccionando results[1]. El geocodificador inverso a menudo devuelve 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 devuelve todos estos resultados.

El geocodificador inverso establece coincidencias con entidades políticas (países, provincias, ciudades y barrios), direcciones y códigos postales.

A continuación, se muestra la lista completa de direcciones devueltas por la consulta anterior.

results[0].formatted_address: "275-291 Bedford Ave, Brooklyn, NY 11211, USA",
results[1].formatted_address: "Williamsburg, NY, USA",
results[2].formatted_address: "New York 11211, USA",
results[3].formatted_address: "Kings, New York, USA",
results[4].formatted_address: "Brooklyn, New York, USA",
results[5].formatted_address: "New York, New York, USA",
results[6].formatted_address: "New York, USA",
results[7].formatted_address: "United States"

Las direcciones se devuelven en el 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 devuelven diferentes tipos de direcciones: desde la dirección más específica hasta entidades políticas menos específicas, como vecindarios, ciudades, condados, países, estados, etc. Si deseas hacer coincidir una dirección más general, es posible que desees inspeccionar 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.

Geocodificación inversa por id. de sitio

En el ejemplo siguiente, se acepta un id. de sitio, se encuentra la dirección correspondiente y se centra el mapa en dicha ubicación. También se genera una ventana de información en la que se muestra la dirección con formato del sitio correspondiente:

// Initialize the map.
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.72, lng: -73.96}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a reverse geocode.
function geocodePlaceId(geocoder, map, infowindow) {
  var placeId = document.getElementById('place-id').value;
  geocoder.geocode({'placeId': placeId}, function(results, status) {
    if (status === 'OK') {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
        });
        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}
<div id="floating-panel">
  <!-- Supply a default place ID for a place in Brooklyn, New York. -->
  <input id="place-id" type="text" value="ChIJd8BlQ2BZwokRAFUEcm_qrcA">
  <input id="submit" type="button" value="Reverse Geocode by Place ID">
</div>
<div id="map"></div>
/* 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;
}
#floating-panel {
  position: absolute;
  top: 10px;
  left: 25%;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
  text-align: center;
  font-family: 'Roboto','sans-serif';
  line-height: 30px;
  padding-left: 10px;
}
#floating-panel {
  width: 440px;
}
#place-id {
  width: 250px;
}
 <!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>
// Initialize the map.
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.72, lng: -73.96}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a reverse geocode.
function geocodePlaceId(geocoder, map, infowindow) {
  var placeId = document.getElementById('place-id').value;
  geocoder.geocode({'placeId': placeId}, function(results, status) {
    if (status === 'OK') {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
        });
        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}

Ver el ejemplo (geocoding-place-id.html).

Restricción de viewports

También puedes dar instrucciones al servicio de geocodificación para que anteponga resultados dentro de un viewport determinado (expresado como un cuadro de límite). Puedes hacerlo configurando el parámetro bounds dentro del literal de objeto GeocoderRequest para definir los límites de este viewport. Ten en cuenta que la restricción solo antepone resultados dentro de los límites. Si existen más resultados fuera de estos límites, pueden incluirse.

Por ejemplo, un geocódigo para “Winnetka” generalmente devuelve 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 en el que se define un cuadro de límite para el Valle de San Fernando, en Los Ángeles, se obtiene como resultado un geocódigo en el que se devuelve el vecindario llamado “Winnetka” en dicha 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"
}

Restricción de códigos por región

También puedes configurar el servicio de geocodificación para que devuelva resultados restringidos a una región en particular usando de manera explícita el parámetro region. Este parámetro toma un código de región, especificado como una subetiqueta region en lenguaje IANA. En la mayoría de los casos, estas etiquetas realizan asignaciones directas a valores de ccTLD (“dominio de nivel superior”) conocidos de dos caracteres como, por ejemplo, “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” por “Gran Bretaña”).

Se pueden enviar solicitudes de geocodificación para cada dominio en el cual la aplicación principal de Google Maps ofrezca geocodificación. Ten en cuenta que la restricción solo antepone resultados para un dominio específico. Si hubiera más resultados relevantes fuera de este dominio, podrían incluirse.

Por ejemplo, un geocódigo para “Toledo” devuelve este resultado, ya que el dominio predeterminado para el servicio de geocodificación se fija 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 fijado en el valor 'es' (España) devolverá 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

También puedes configurar el servicio de geocodificación para que devuelva resultados de dirección restringidos a un área específica. Especifica la restricción usando el parámetro componentRestrictions. Un filtro consta de uno o más de los siguientes tipos: route, locality, administrativeArea, postalCode y country. Solo se devolverán resultados que coincidan con los filtros. Los valores de filtros admiten los mismos métodos de corrección ortográfica y coincidencia parcial que otras solicitudes de geocodificación.

En el siguiente ejemplo de función se demuestra el uso del parámetro componentRestrictions para aplicar un filtro 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);
  }
});
}

Enviar comentarios sobre...

Google Maps JavaScript API
Google Maps JavaScript API
Si necesitas ayuda, visita nuestra página de asistencia.