在Google Maps API v3 中減慢查詢速度以避免OVER_QUERY_LIMIT
使用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() 引入 2 秒的延遲。根據需要調整延遲值以符合 Google Maps API 設定的速率限制。
Mike Williams 的版本 3 端口
Mike Williams 提供了一個版本 3 端口他的原始教程有效地處理了延遲並避免了 OVER_QUERY_LIMIT 錯誤。該連接埠可以在這裡找到:
http://acleach.me.uk/gmaps/v3/plotaddresses.htm
來自Mike Williams 版本3 連接埠的相關代碼
以下來自Mike Williams 版本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