2017-05-08 8 views
-1

私は400アドレスでjsonを解析し、各場所に地図アイコンを設定しようとしています。私の問題は、アイテムをループしているときにエラーが発生するということです:OVER_QUERY_LIMIT。しかし、Googleのジオコードapiで位置を設定する最善の方法は何ですか? My機能は、次のようになります。ジオコードからjquery geocoder.geocode(400 Items)

 function getAddresses(data) { 
      var items, markers_data = []; 
      if (data.addresses.length > 0) { 
       items = data.addresses; 

       for (var i = 0; i < items.length; i++) { 
        var 
         item = items[i] 
         , street = item.address.street 
         , zip = item.address.zip 
         , city = item.address.city 
         , country = item.address.country; 
        var 
         geocoder = new google.maps.Geocoder() 
         , fulladdress = street + ',' + zip + ' '+ city + ',' + country; 

        setTimeout(function() { 
         geocoder.geocode({'address': fulladdress}, 
          function(results, status) { 
          if (status == google.maps.GeocoderStatus.OK) { 

           console.log(results[0].geometry.location.lat()); 

           console.log(results[0].geometry.location.lng());  
           markers_data.push({ 
            lat : results[0].geometry.location.lat(), 
            lng : results[0].geometry.location.lng(), 
            title: item.name, 
            infoWindow: { 
             content: '<h2>'+item.name+'</h2><p>'+ street + zip + city +'</p>' 
            } 
           }); 
          } else { 
           console.log('not geocoded'); 
           console.log('status'); 
           console.log(status); 
          } 
         }); 
        }, 1000); 
       } 
      } 

      map.addMarkers(markers_data); 
     } 

私はタイムアウト機能で私geocoder.geocode機能を入れてみましたが、残念ながら、このwon'tヘルプ。私は私のjsのプラグインgmaps.jsを使用しています。

答えて

0

ドキュメントに記載されているようにジオコーダサービスのためのセッション単位のクォータがあります:

The rate limit is applied per user session, regardless of how many users share the same project. When you first load the API, you are allocated an initial quota of requests. Once you use this quota, the API enforces rate limits on additional requests on a per-second basis. If too many requests are made within a certain time period, the API returns an OVER_QUERY_LIMIT response code.

The per-session rate limit prevents the use of client-side services for batch requests, such as batch geocoding. For batch requests, use the Google Maps Geocoding API web service.

https://developers.google.com/maps/documentation/javascript/geocoding#UsageLimits

だから、あなたは、クライアント側の呼び出しを絞ると、最初の10個の要求の後に毎秒1つの要求を実行する必要がありますがジオコーディングAPI Webサービスを使用してサーバー側のバッチジオコーディングを実装することができます。ここでは、1秒あたり最大50個の要求を処理できます。

あなたのコードでは、1秒後にすべてのリクエストを実行してみてください。次回のリクエストごとに遅延を増やす必要があります。

setTimeout(function() { 
    //Your code 
}, 1000 * i); 

したがって、最初の要求がそれほどに、直ちに実行1秒後の第二、第三の2秒後とします。

関連する問題