Google Maps API - GClientGeocoder inconsistência usando o método getLatLng?
-
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);
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
-
Alguns dos meus endereços estão incorretos.
-
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);