首页 >web前端 >js教程 >如何避免 Google Maps API v3 中出现 OVER_QUERY_LIMIT 错误?

如何避免 Google Maps API v3 中出现 OVER_QUERY_LIMIT 错误?

Susan Sarandon
Susan Sarandon原创
2024-11-02 10:42:30969浏览

How to Avoid OVER_QUERY_LIMIT Errors in Google Maps API v3?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn