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

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

  • Geocodificación en el cliente, que se ejecuta en el navegador, generalmente 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 le 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

A continuación, se muestra un ejemplo de geocodificación del cliente que toma una dirección, la geocodifica, mueve el centro del mapa a esa ubicación y agrega allí un marcador de mapa:

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 ver más ejemplos, consulta la documentación de la API de Maps JavaScript.

El siguiente es un ejemplo que 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 sobre las cuotas y los costos

Los costos, las cuotas y los límites de frecuencia de la geocodificación rigen las estrategias que se describen en este documento.

Costo

Los límites de cuota por día (QPD) ya no se usan para las solicitudes de geocodificación. En cambio, 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 por cada precio. Para administrar el costo de uso, considera limitar la cuota diaria.

Límites de frecuencia

El servicio de geocodificación tiene un límite de frecuencia de 3,000 QPM (consultas por minuto), que se calcula como la suma de las consultas del cliente y el servidor.

Cuando se ejecutan solicitudes de geocodificación en el cliente a intervalos periódicos, como en una app para dispositivos móviles, las solicitudes pueden mostrar errores si todos los usuarios realizan solicitudes al mismo tiempo (por ejemplo, todas en el mismo segundo 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 la base de usuarios.
  • Si desarrollas para Android, usa una alarma repetitiva inexacta.
  • Si desarrollas para Android, selecciona una estrategia de ubicación adecuada.

Almacenamiento en caché

Consulta las Políticas de la API de Geocoding para obtener información 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 para 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 del cliente es mejor cuando se geocodifican direcciones según las 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 usará el geocódigo para crear un marcador en el mapa. También puedes realizar 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 le aplica geocodificación 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 es ideal para aplicaciones que requieren que realices la geocodificación de direcciones sin la entrada de un cliente. Un ejemplo común es cuando obtienes un conjunto de datos que proviene de forma independiente de las entradas del usuario, por ejemplo, si tienes un conjunto de direcciones fijo, limitado y conocido que necesita geocodificación. La geocodificación en el servidor también puede ser útil como copia de seguridad para casos en los que falla la geocodificación del cliente.

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