Frage

Ich habe bemerkt, dass meine Geocoder im Code inkonsistent ist unten gezeigt, weil vor dem „getLatLng“ Verfahren I 10 gültige Stellen zeigen genannt wird, aber nach dieser Codezeile die Anzahl der Punkte, die zeigen, bis tatsächlich unterscheidet sich jedes Mal, wenn ich Suche (gleiche Suchkriterien - fYI) zwischen 5 und 10 zufällig .. sehr seltsam

Wer noch Fragen ähnlich wie das? Wenn ja, wie hast du sie lösen?

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);
War es hilfreich?

Lösung 4

Ich fand, dass es nicht der „verify Adresse“ war Code, der diese Inkonsistenz verursacht wurde, sondern - nur die Tatsache, dass die Karten api nicht eine Tonne Geocoder wollte Anrufe so habe ich ein einfaches 225 ms Timeout zwischen jede Anforderung und tat dies der Trick

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

Andere Tipps

Ich habe dies in meinem ASP.NET app gesehen. Mein Problem war, dass ich die Adressen wurde die Validierung vor der Anzeige und

  1. Einige meiner Adressen waren nicht korrekt.

  2. Ihr Adresse Validierungssystem eine bestimmte Anzahl von Anfragen bei jedem Aufruf von einem Client nur verarbeiten kann.

Es ist besser, die Adressen Schrubben vor Geokodierung (IMO).

Versuchen Sie, Ihre Adressen zu überprüfen und versuchen, auch die Menge an Adressen zu begrenzen Sie nur zu testen, senden und zu sehen, ob das ist in Folge für jede Anforderung.

Ich hoffe, das hilft.

Versuchen Sie es einmal so aus, wie dies i über 34 Punkte mit einem Lauf bekommen:

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

Ich bin nicht sicher, was der addPreCount() tut. Aber ich denke, es ist offensichtlich, dass das Timeout etwas wie Index durch die tatsächliche Timeout Konstante multipliziert werden sollte.

So den Timeout-Konstante unter der Annahme definiert ist 225. Der Timeout für den Geocoder-Wrapper übergeben werden würde:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top