Otimizar o uso de cota ao realizar geocodificação

A geocodificação é o processo de conversão de endereços ("1600 Amphitheatre Parkway, Mountain View, CA") em coordenadas geográficas (37.423021, -122.083739), que podem ser usadas para posicionar marcadores ou posicionar o mapa. As APIs da Plataforma Google Maps oferecem duas abordagens para geocodificação:

  • Geocodificação do lado do cliente, que é executada no navegador, geralmente em resposta à 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, que permite que o servidor consulte diretamente os geocódigos dos servidores do Google. A API Geocoding é o serviço da Web que fornece essa funcionalidade. Normalmente, esse serviço é integrado a outro código em execução no servidor. A geocodificação do lado do servidor está 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 ele, move o centro do mapa para esse local e adiciona um marcador de mapa a ele:

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 de como usar o 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 fornece um formato XML como uma 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 taxa de geocodificação orientam as estratégias descritas neste documento.

Custo

Os limites de cota por dia (QPD) não são mais usados para solicitações de geocodificação. Em vez disso, cada solicitação de geocodificação, seja do lado do cliente pelo navegador ou do servidor pelo serviço da Web da API Geocoding, é faturada a um preço por cada. Para gerenciar seu custo de uso, considere manipular sua cota diária.

Limites de taxas

O serviço de geocodificação é limitado a 50 QPS (consultas por segundo), 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, suas solicitações poderão retornar erros se todos os seus usuários estiverem fazendo solicitações ao mesmo tempo (por exemplo, todos no mesmo segundo de cada minuto). Para evitar isto, considere uma das opções:

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

Armazenamento em cache

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

Ao usar geocodificação do lado do cliente

A resposta curta é &quat;quase sempre." Os motivos são:

  • As solicitações e respostas do lado do cliente oferecem 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: idioma do usuário, região e janela de visualização.

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 digita um endereço na sua página. O seu aplicativo geocodifica este endereço. Depois, sua página usa o geocódigo para criar um marcador no mapa. Ou o app faz uma análise 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. Ele é geocodificado no aplicativo 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 personalizar uma resposta com base nos seus próprios dados.

Ao usar geocodificação do lado do servidor

A geocodificação do lado do servidor é melhor usada para aplicativos que exigem que você geocodifique 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 para quando a geocodificação do lado do cliente falhar.

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