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 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 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 incluye un ejemplo de geocodificación en el cliente que toma una dirección, le aplica geocodificación, traslada 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 obtener más ejemplos, consulta la documentación de la API de Maps JavaScript.

A continuación, se muestra 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. Si quieres ver más ejemplos, consulta la documentación de la API de Geocoding y las bibliotecas cliente para Python y otros lenguajes.

Consideraciones de la cuota y el costo

Los costos de geocodificación, las cuotas y los límites de frecuencia 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 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 a un precio por cada una. Para administrar el costo de uso, puedes limitar tu cuota diaria.

Límites de frecuencia

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

Cuando ejecutas solicitudes de geocodificación en el cliente a intervalos periódicos, como en una app para dispositivos móviles, es posible que tus solicitudes muestren 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 tu base de usuarios.
  • Si desarrollas contenido para Android, usa una alarma de repetición inexacta.
  • Si desarrollas contenido para Android, selecciona una estrategia de ubicación adecuada.

Almacenamiento en caché

Consulta las 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 y más 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 en el 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 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 le aplica geocodificación en el navegador. Luego, la app envía los datos al servidor. El servidor responde con algunos datos, como 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 que geocodifiques direcciones sin entrada de un cliente. Un ejemplo común es cuando obtienes un conjunto de datos que no depende de la entrada del usuario, por ejemplo, si tienes un conjunto de direcciones fijo, fino 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 problemas posibles son un aumento innecesario de la latencia para el usuario, y resultados de geocodificación de una calidad menor que el del cliente debido a que hay menos información disponible en la solicitud.