«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать ошибок OVER_QUERY_LIMIT в Google Maps API v3?

Как избежать ошибок OVER_QUERY_LIMIT в Google Maps API v3?

Опубликовано 12 ноября 2024 г.
Просматривать:467

How to Avoid OVER_QUERY_LIMIT Errors in Google Maps API v3?

Замедление выполнения запросов во избежание OVER_QUERY_LIMIT в Google Maps API v3

При использовании Google Maps API v3 важно быть в курсе ежедневных лимит запросов и ограничения скорости. Превышение этих ограничений может привести к ошибке OVER_QUERY_LIMIT. Чтобы избежать этого, важно реализовать задержки между запросами.

Реализация задержек в JavaScript

Один из подходов к реализации задержек в JavaScript — использование функции setTimeout(). Вот пример:

function codeAddress(vPostCode) {
    if (geocoder) {
        setTimeout(function() {
            geocoder.geocode({ 'address': "'"   vPostCode   "'"}, function(results, status) {
                // Code for handling the geocoding result
            });
        }, 2000);
    }
}

В этом примере с помощью setTimeout() вводится двухсекундная задержка перед отправкой каждого запроса на геокодирование. При необходимости отрегулируйте значение задержки, чтобы оно соответствовало ограничениям скорости, установленным Google Maps API.

Порт версии 3 Майка Уильямса

Майк Уильямс предоставил порт версии 3 его оригинальное руководство, которое эффективно справляется с задержками и позволяет избежать ошибки OVER_QUERY_LIMIT. Этот порт можно найти здесь:

http://acleach.me.uk/gmaps/v3/plotaddresses.htm

Соответствующий код из порта Майка Уильямса версии 3

Следующий фрагмент кода из порта Майка Уильямса версии 3 иллюстрирует реализацию задержки:

  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();
      }
    );
  }

Этот код реализует механизм динамической задержки. Если возникает ошибка google.maps.GeocoderStatus.OVER_QUERY_LIMIT, код соответствующим образом корректирует задержку между запросами, чтобы избежать ошибок в будущем.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3