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 :
<code class="javascript">function codeAddress(vPostCode) { if (geocoder) { setTimeout(function() { geocoder.geocode({ 'address': "'" + vPostCode + "'"}, function(results, status) { // Code for handling the geocoding result }); }, 2000); } }</code>
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 port version 3 de Mike Williams illustre le implémentation des délais :
<code class="javascript"> 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(); } ); }</code>
Ce code implémente un mécanisme de délai 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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!