Google Maps API - GClientGeocoder inconsistência usando o método getLatLng?

StackOverflow https://stackoverflow.com/questions/408444

  •  03-07-2019
  •  | 
  •  

Pergunta

Tenho notado que minha geocoder é inconsistente no código mostrado abaixo, porque antes o método "getLatLng" é chamado I mostram 10 locais válidos, mas após esta linha de código o número de pontos que realmente aparecer é diferente cada vez que eu procurar (mesmos critérios de pesquisa - fyi) entre 5 e 10 de forma aleatória .. muito estranho

Alguém tem problemas semelhantes a este? Se assim como você resolvê-los?

geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
if (point) {
        var icon = new GIcon();
        var marker = new GMarker(point, { icon: icon });
        GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
        map.addOverlay(marker);
Foi útil?

Solução 4

Na verdade, eu achei que ele não era o código "verificar endereço" que estava causando essa inconsistência, mas em vez disso - apenas o fato de que a API do Google Maps não queria uma tonelada de chamadas geocodificador então eu adicionei um simples 225ms de tempo limite entre cada pedido e este fez o truque

function preGeoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus) {
        addPreCount();

        //don't change this timeout as it was the lowest timeout that still worked w/ the api
        var timeout = parseInt(precount) * 225;

        window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
    }

Outras dicas

Eu já vi isso em meu aplicativo ASP.NET. Meu problema era que eu estava validar os endereços antes de exibi-los e

  1. Alguns dos meus endereços estão incorretos.

  2. O sistema de validação de endereço só pode lidar com uma certa quantidade de pedidos em cada chamada por um cliente.

É melhor para esfregar os endereços antes de geocodificação (IMO).

Tente verificar seus endereços e também tentar limitar a quantidade de endereços que você envie apenas para testar e ver se isso é consecutiva para cada solicitação.

Espero que ajude.

Dê-lhe uma tentativa como esta, como esta eu recebo mais de 34 pontos com uma corrida:

function addAddress(address,runde) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        if (runde<5) { // rekursiv, try adress 5 times to get
            window.setTimeout(function() {addAddress(address,runde+1);}, 1000); // wait 1 second bevor next try
            }
      } else {
        var marker_add = new GMarker(point);
        //alert(marker.getLatLng());
        leftClick(0, marker_add.getLatLng()); // function, add marker to map
      }
    }
  );
}  

Eu não tenho a certeza que o addPreCount() faz. Mas eu acho que é óbvio que o tempo limite deve ser algo como índice multiplicado pela constante de tempo limite real.

Assim, supondo que a constante de tempo limite definido é 225. O tempo limite para ser passado para o wrapper geocoder seria:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top