Замедление выполнения запросов во избежание 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