在 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中文网其他相关文章!