Maison  >  Article  >  interface Web  >  Comment éviter les erreurs OVER_QUERY_LIMIT dans l'API Google Maps v3 ?

Comment éviter les erreurs OVER_QUERY_LIMIT dans l'API Google Maps v3 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 10:42:30882parcourir

How to Avoid OVER_QUERY_LIMIT Errors in Google Maps API v3?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn