Google Maps API - GClientGeocoder Inkonsistenz mit getLatLng Methode?
-
03-07-2019 - |
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);
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
-
Einige meiner Adressen waren nicht korrekt.
-
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);