Abfragen verlangsamen, um OVER_QUERY_LIMIT in Google Maps API v3 zu vermeiden
Bei der Verwendung von Google Maps API v3 ist es wichtig, sich des Tages bewusst zu sein Abfragelimit und Ratenlimits. Das Überschreiten dieser Grenzwerte kann zum Fehler OVER_QUERY_LIMIT führen. Um dies zu vermeiden, ist es wichtig, Verzögerungen zwischen Abfragen zu implementieren.
Implementieren von Verzögerungen in JavaScript
Ein Ansatz zum Implementieren von Verzögerungen in JavaScript ist die Funktion setTimeout(). Hier ist ein Beispiel:
function codeAddress(vPostCode) {
if (geocoder) {
setTimeout(function() {
geocoder.geocode({ 'address': "'" vPostCode "'"}, function(results, status) {
// Code for handling the geocoding result
});
}, 2000);
}
}
In diesem Beispiel wird mit setTimeout() eine Verzögerung von 2 Sekunden eingeführt, bevor jede Geokodierungsanforderung gesendet wird. Passen Sie den Verzögerungswert nach Bedarf an, um die von der Google Maps-API festgelegten Ratenbeschränkungen einzuhalten.
Version-3-Port von Mike Williams
Mike Williams hat einen Version-3-Port von bereitgestellt sein ursprüngliches Tutorial, das effektiv mit Verzögerungen umgeht und den Fehler OVER_QUERY_LIMIT vermeidet. Dieser Port kann hier gefunden werden:
http://acleach.me.uk/gmaps/v3/plotaddresses.htm
Relevanter Code von Mike Williams' Version 3 Port
Der folgende Codeausschnitt aus der Version 3-Portierung von Mike Williams veranschaulicht die Implementierung von Verzögerungen:
function getAddress(search, next) {
geo.geocode({address:search}, function (results,status)
{
// If that was successful
if (status == google.maps.GeocoderStatus.OK) {
// Lets assume that the first marker is the one we want
var p = results[0].geometry.location;
var lat=p.lat();
var lng=p.lng();
// Output the data
var msg = 'address="' search '" lat=' lat ' lng=' lng '(delay=' delay 'ms)<br>';
document.getElementById("messages").innerHTML = msg;
// Create a marker
createMarker(search,lat,lng);
}
// ====== Decode the error status ======
else {
// === if we were sending the requests to fast, try this one again and increase the delay
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
nextAddress--;
delay ;
} else {
var reason="Code " status;
var msg = 'address="' search '" error=' reason '(delay=' delay 'ms)<br>';
document.getElementById("messages").innerHTML = msg;
}
}
next();
}
);
}
Dieser Code implementiert einen dynamischen Verzögerungsmechanismus. Wenn der Fehler google.maps.GeocoderStatus.OVER_QUERY_LIMIT auftritt, passt der Code die Verzögerung zwischen Anfragen entsprechend an, um zukünftige Fehler zu vermeiden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3