Optimización del uso de la cuota durante la geocodificación

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La geocodificación es el proceso que convierte direcciones (&1600 Amphitheatre Parkway, Mountain View, CA&quot) en coordenadas geográficas (37.423021, -122.083739), que puedes usar para colocar marcadores o posicionar el mapa. Las API de Google Maps Platform proporcionan dos enfoques de geocodificación:

  • Geocodificación en el cliente, que se ejecuta en el navegador, por lo general, en respuesta a la acción del usuario. La API de Maps JavaScript proporciona clases que realizan las solicitudes por ti. Este enfoque se describe en la documentación de la API de Maps JavaScript.
  • Geocodificación en el servidor HTTP, que permite a tu servidor consultar geocódigos directamente en los servidores de Google. La API de Geocoding es el servicio web que proporciona esta funcionalidad. Por lo general, integras este servicio con otro código que se ejecuta en el servidor. La geocodificación en el servidor se describe en la documentación de la API de Geocoding.

Ejemplos de geocodificación en el cliente y el servidor

Aquí te mostramos un ejemplo de geocodificación en el cliente que toma una dirección, le aplica geocodificación, mueve el centro del mapa a esa ubicación y agrega allí un marcador:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

Para obtener más ejemplos, consulta la documentación de la API de Maps JavaScript.

A continuación, se muestra un ejemplo en el que se usa Python para realizar una solicitud de geocodificación en el servidor:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

Esto genera un objeto JSON con el siguiente contenido:

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "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" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

El geocodificador del servidor también proporciona un formato XML como alternativa a JSON. Para ver más ejemplos, consulta la documentación de la API de Geocoding y las bibliotecas cliente para Python y otros lenguajes.

Consideraciones de cuotas y costos

Los costos, las cuotas y los límites de frecuencia de la geocodificación impulsan las estrategias descritas en este documento.

Costo

Los límites de cuota por día (QPD) ya no se usan para las solicitudes de codificación geográfica. En su lugar, cada solicitud de geocodificación, ya sea del cliente a través del navegador o del servidor, a través del servicio web de la API de Geocoding, se factura a un precio por cada una. Para administrar el costo de uso, considera limitar tu cuota diaria.

Límites de frecuencia

El servicio de geocodificación tiene un índice limitado a 50 QPS (consultas por segundo), calculadas como la suma de las consultas del cliente y el servidor.

Cuando ejecutas solicitudes de geocodificación en el cliente en intervalos periódicos, como en una app para dispositivos móviles, tus solicitudes pueden mostrar errores si todos los usuarios realizan solicitudes al mismo tiempo (por ejemplo, todas al mismo tiempo de cada minuto). Para evitar esto, considera una de las siguientes opciones:

  • Introduce intervalos aleatorios a tus solicitudes (jitter). Asegúrate de que las solicitudes sean aleatorias en toda tu base de usuarios.
  • Si desarrollas contenido para Android, usa una alarma de repetición inexacta.
  • Si desarrollas apps para Android, selecciona una estrategia de ubicación adecuada.

Almacenamiento en caché

Consulta Políticas de la API de Geocoding sobre el almacenamiento en caché.

Cuándo usar geocodificación en el cliente

La respuesta corta es “casi siempre”. Estos son los motivos:

  • La solicitud y la respuesta del cliente proporcionan una experiencia más rápida e interactiva a los usuarios.
  • Una solicitud del cliente puede incluir información que mejore la calidad de la geocodificación: idioma del usuario, región y viewport.

En particular, la geocodificación en el cliente es mejor cuando se geocodifican direcciones basadas en entradas del usuario.

Existen dos arquitecturas básicas para la geocodificación en el cliente:

  • Aplicar la geocodificación y mostrarla por completo en el navegador. Por ejemplo, el usuario ingresa una dirección en tu página. Tu aplicación le aplica geocodificación. Luego, tu página usa el geocódigo para crear un marcador en el mapa. O bien, tu app hace un análisis simple usando el geocódigo. No se envían datos al servidor. Esto reduce la carga del servidor.
  • Realizar la geocodificación en el navegador y enviarla al servidor. Por ejemplo, el usuario ingresa una dirección en tu página. Tu aplicación geocodifica en el navegador. Luego, la app envía los datos al servidor. El servidor responde con algunos datos, como los lugares de interés cercanos. Esto te permite personalizar una respuesta en función de tus propios datos.

Cuándo usar geocodificación en el servidor

La geocodificación en el servidor se usa mejor para aplicaciones que requieren la geocodificación de direcciones sin entrada de un cliente. Un ejemplo común es cuando obtienes un conjunto de datos que depende de la entrada del usuario, por ejemplo, si tienes un conjunto de direcciones fijo, finito y conocido que necesita geocodificación. La geocodificación en el servidor también puede ser útil como copia de seguridad cuando falla la geocodificación en el cliente.

Algunos posibles problemas son un aumento innecesario de la latencia para el usuario y resultados de geocodificación de una calidad inferior a la del cliente, ya que hay menos información disponible en la solicitud.