Ralentir les requêtes pour éviter OVER_QUERY_LIMIT dans l'API Google Maps v3
Lorsque vous utilisez l'API Google Maps v3, il est important d'être conscient du quotidien limite de requête et limites de débit. Le dépassement de ces limites peut entraîner l'erreur OVER_QUERY_LIMIT. Pour éviter cela, il est essentiel d'implémenter des délais entre les requêtes.
Implémentation des délais en JavaScript
Une approche pour implémenter les délais en JavaScript consiste à utiliser la fonction setTimeout(). Voici un exemple :
function codeAddress(vPostCode) {
if (geocoder) {
setTimeout(function() {
geocoder.geocode({ 'address': "'" vPostCode "'"}, function(results, status) {
// Code for handling the geocoding result
});
}, 2000);
}
}
Dans cet exemple, un délai de 2 secondes est introduit à l'aide de setTimeout() avant d'envoyer chaque requête de géocodage. Ajustez la valeur du délai si nécessaire pour respecter les limites de débit définies par l'API Google Maps.
Port version 3 de Mike Williams
Mike Williams a fourni un port version 3 de son tutoriel original qui gère efficacement les retards et évite l'erreur OVER_QUERY_LIMIT. Ce port peut être trouvé ici :
http://acleach.me.uk/gmaps/v3/plotaddresses.htm
Code pertinent du port version 3 de Mike Williams
L'extrait de code suivant du portage version 3 de Mike Williams illustre l'implémentation des délais :
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();
}
);
}
Ce code implémente un mécanisme de retard dynamique. Si l'erreur google.maps.GeocoderStatus.OVER_QUERY_LIMIT est rencontrée, le code ajuste le délai entre les requêtes en conséquence pour éviter de futures erreurs.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3