在Google Maps API v3 中減慢查詢以避免OVER_QUERY_LIMIT
使用Google Maps API v3 時,請務必注意日常操作限制和速率限制。超過這些限制可能會導致 OVER_QUERY_LIMIT 錯誤。為了避免這種情況,必須在查詢之間實現延遲。
在 JavaScript 中實現延遲
在 JavaScript 中實現延遲的一種方法是透過 setTimeout() 函數。以下是一個範例:
<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>
在此範例中,在發送每個地理編碼請求之前使用 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 移植的代碼片段說明了延遲的實作:
<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>
這段程式碼實現了動態延遲機制。如果遇到 google.maps.GeocoderStatus.OVER_QUERY_LIMIT 錯誤,程式碼會相應調整請求之間的延遲以避免將來發生錯誤。
以上是如何避免 Google Maps API v3 中出現 OVER_QUERY_LIMIT 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!