Otimizar o uso de cota ao realizar geocodificação

Geocodificação é o processo de converter endereços ("1600 Amphitheatre Parkway, Mountain View, CA") em coordenadas geográficas (37.423021, -122.083739), que você pode usar para colocar marcadores ou posicionar o mapa. As APIs da Plataforma Google Maps oferecem duas abordagens de geocodificação:

  • Geocodificação do lado do cliente, que é executada no navegador, geralmente em resposta a uma ação do usuário. A API Maps JavaScript fornece classes que fazem as solicitações para você. Essa abordagem é descrita na documentação da API Maps JavaScript.
  • Geocodificação do lado do servidor HTTP, que permite que seu servidor consulte diretamente os servidores do Google para códigos geográficos. A API Geocoding é o serviço da Web que oferece essa funcionalidade. Normalmente, você integra esse serviço com outro código que está sendo executado no lado do servidor. A geocodificação do lado do servidor é descrita na documentação da API Geocoding.

Exemplos de geocodificação do lado do cliente e do lado do servidor

Veja um exemplo de geocodificação do lado do cliente que usa um endereço, geocodifica esse endereço, move o centro do mapa para esse local e adiciona um marcador de mapa lá:

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 mais exemplos, consulte a documentação da API Maps JavaScript.

Veja um exemplo usando Python para fazer uma solicitação de geocodificação do lado do 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()

Isto produz um objeto JSON com o seguinte conteúdo:

{
  "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
        }
      }
    }
  } ]
}

O geocodificador do lado do servidor também oferece um formato XML como alternativa ao JSON. Para mais exemplos, consulte a documentação da API Geocoding e as bibliotecas de cliente para Python e outras linguagens.

Considerações sobre cota e custo

Os custos, as cotas e os limites de taxas da geocodificação determinam as estratégias descritas neste documento.

Custo

Os limites de cota por dia (QPD) não estão mais em uso para solicitações de geocodificação. Cada solicitação de geocodificação, seja do lado do cliente pelo navegador ou do servidor pelo serviço da Web da API Geocoding, é cobrado a cada preço. Para gerenciar seu custo de uso, considere limitar sua cota diária.

Limitações de taxa

O serviço de geocodificação tem um limite de taxa de 3.000 QPM (consultas por minuto), calculado como a soma das consultas do lado do cliente e do servidor.

Ao executar solicitações de geocodificação do lado do cliente em intervalos periódicos, como em um app para dispositivos móveis, as solicitações poderão retornar erros se todos os usuários estiverem fazendo solicitações ao mesmo tempo (por exemplo, no mesmo segundo de cada minuto). Para evitar isto, considere uma das opções:

  • Introduzir intervalos aleatórios às solicitações (instabilidade) Verifique se as solicitações são aleatórias em toda a base de usuários.
  • Se estiver desenvolvendo para Android, use um alarme de repetição impreciso.
  • Se estiver desenvolvendo para Android, selecione uma estratégia de localização adequada.

Armazenamento em cache

Consulte as Políticas da API Geocoding sobre o armazenamento em cache.

Ao usar geocodificação do lado do cliente

A resposta curta é "quase sempre". Estes são os motivos:

  • A solicitação e a resposta do lado do cliente proporcionam uma experiência mais rápida e interativa aos usuários.
  • Uma solicitação do lado do cliente pode incluir informações que melhoram a qualidade da geocodificação, como idioma, região e janela de visualização do usuário.

Em especial, a geocodificação do lado do cliente é melhor ao geocodificar endereços com base na entrada do usuário.

Há duas arquiteturas básicas para a geocodificação do lado do cliente:

  • Realize a geocodificação e a exibição inteiramente no navegador. Por exemplo, o usuário insere um endereço na página. O seu aplicativo geocodifica este endereço. Depois, ela usa esse geocódigo para criar um marcador no mapa. Ou o app faz algumas análises simples usando o geocódigo. Nenhum dado é enviado ao servidor. Isto reduz a carga no seu servidor.
  • Realize a geocodificação no navegador e, em seguida, envie-a ao servidor. Por exemplo, o usuário insere um endereço na sua página. Seu aplicativo o geocodifica no navegador. O aplicativo então envia os dados ao servidor. O servidor responde com alguns dados, como pontos de interesse próximos. Isso permite que você personalize uma resposta com base nos seus próprios dados.

Ao usar geocodificação do lado do servidor

A geocodificação do lado do servidor é mais adequada para aplicativos que exigem a geocodificação de endereços sem a entrada de um cliente. Um exemplo comum é quando você recebe um conjunto de dados que vem independentemente da entrada do usuário, por exemplo, se você tem um conjunto fixo, finito e conhecido de endereços que precisam de geocodificação. A geocodificação do lado do servidor também pode ser útil como backup quando a geocodificação do lado do cliente falha.

Algumas possíveis preocupações são um aumento desnecessário na latência para o usuário e os resultados de geocodificação de qualidade inferior ao do cliente, já que há menos informações disponíveis na solicitação.