"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-12
Parcourir:184

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 :

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.

Dernier tutoriel Plus>

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