「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Google Maps API v3 での OVER_QUERY_LIMIT エラーを回避するにはどうすればよいですか?

Google Maps API v3 での OVER_QUERY_LIMIT エラーを回避するにはどうすればよいですか?

2024 年 11 月 12 日に公開
ブラウズ:813

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 で遅延を実装する方法の 1 つは、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