API Google Maps - Incohérence de GClientGeocoder dans la méthode getLatLng?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai remarqué que mon géocodeur présente des incohérences dans le code ci-dessous, car avant "getLatLng". La méthode s'appelle J'indique 10 emplacements valides, mais après cette ligne de code, le nombre de points réellement affichés est différent à chaque recherche (critères de recherche identiques - fyi) Entre 5 et 10 au hasard .. très étrange

Quelqu'un at-il des problèmes similaires à celui-ci? Si oui, comment les avez-vous résolus?

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);
Était-ce utile?

La solution 4

J'ai en fait constaté qu'il ne s'agissait pas de l'adresse de vérification "Vérifier l'adresse". le code qui causait cette incohérence, mais au lieu de cela - juste le fait que l’API de cartes ne voulait pas une tonne d’appels de géocodeur, j’ai donc ajouté un délai d’attente de 225 ms entre chaque requête.

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

Autres conseils

Je l'ai vu dans mon application ASP.NET. Mon problème était que je validais les adresses avant de les afficher et

  1. Certaines de mes adresses étaient incorrectes.

  2. Leur système de validation d'adresse ne peut traiter qu'un certain nombre de demandes à chaque appel d'un client.

Il vaut mieux récurer les adresses avant le géocodage (IMO).

Essayez de vérifier vos adresses et essayez également de limiter le nombre d'adresses que vous envoyez juste pour tester et voir si c'est consécutif pour chaque demande.

L’espoir que cela aide.

Faites un essai comme celui-ci, comme cela, je compte plus de 34 points en un seul coup:

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

Je ne suis pas sûr de ce que fait le addPreCount () . Mais je pense qu’il est évident que le délai d’attente doit être du type index multiplié par la constante de délai d’attente réelle.

Supposons donc que la constante de délai d'attente définie est 225. Le délai d'attente à transmettre au wrapper de géocodeur serait:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top