API di Google Maps - Incoerenza GClientGeocoder utilizzando il metodo getLatLng?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho notato che il mio geocoder non è coerente nel codice mostrato di seguito perché prima di " getLatLng " Il metodo si chiama Mostra 10 posizioni valide, ma dopo questa riga di codice il numero di punti che vengono effettivamente visualizzati è diverso ogni volta che eseguo una ricerca (stessi criteri di ricerca - fyi) Tra 5 e 10 a caso ... molto strano

Qualcuno ha problemi simili a questo? In tal caso, come li hai risolti?

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);
È stato utile?

Soluzione 4

In realtà ho scoperto che non era l'indirizzo "verifica" " codice che causava questa incoerenza, ma invece - solo il fatto che le mappe api non volevano una tonnellata di chiamate al geocoder, quindi ho aggiunto un semplice timeout di 225 ms tra ogni richiesta e questo ha fatto il trucco

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);
    }

Altri suggerimenti

L'ho visto nella mia app ASP.NET. Il mio problema era che stavo convalidando gli indirizzi prima di visualizzarli e

  1. Alcuni dei miei indirizzi erano errati.

  2. Il loro sistema di convalida dell'indirizzo può gestire solo un certo numero di richieste su ogni chiamata da parte di un cliente.

È meglio cancellare gli indirizzi prima del geocodifica (IMO).

Prova a verificare i tuoi indirizzi e prova anche a limitare la quantità di indirizzi inviati solo per testare e vedere se questo è consecutivo per ogni richiesta.

Spero che sia d'aiuto.

Provalo in questo modo, in questo modo ottengo oltre 34 punti con una corsa:

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
      }
    }
  );
}  

Non sono sicuro di cosa faccia addPreCount () . Ma penso sia ovvio che il timeout dovrebbe essere qualcosa di simile all'indice moltiplicato per la costante di timeout effettiva.

Supponendo quindi che la costante di timeout definita sia 225. Il timeout da passare al wrapper del geocoder sarebbe:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top