我非常擅长粘贴代码,所以这里是一个完整的运行示例: https://plnkr.co/edit/klOViMslWjBFy3KTq507?p=preview
<html>
<body>
<script>
function initMap() {
geocoder = new google.maps.Geocoder();
console.log('sending requests');
geocodeAddress(geocoder,0);
}
function geocodeAddress(geocoder,cnt) {
if(cnt==50){
console.log('ending sending 50 requests');
return ;
}
var address = 'USA';
console.log('sending request');
geocoder.geocode({'address': address}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
console.log('got response OK');
} else {
console.error('got response wrong',status);
}
});
setTimeout(function(){
geocodeAddress(geocoder,cnt+1);
},100);
}
</script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?china=false&v=3.20&libraries=weather,geometry,visualization&language=en&sensor=false&callback=initMap"></script>
</body>
</html>
我每100毫秒发送一次请求,这意味着我发送10个请求/秒,这是客户端的确切限制。 然而我仍然得到OVER_LIMIT错误.... 为什么呢?
答案 0 :(得分:0)
谷歌地图有配额和速率限制。谷歌的限制似乎比他们在文档中提出的限制更多,很可能取决于服务器负载。我做了一个类似的应用程序,我有不同的限制取决于小时和日期(意味着当更多人想要访问地理编码时,他们会抛出更多OVER_LIMIT)。
我的经验说,只有你这样做
setTimeout(function(){
geocodeAddress(geocoder,cnt+1);
},1000);
你不会得到OVER_LIMIT。
您可以在此处找到更多解决方案: OVER_QUERY_LIMIT in Google Maps API v3: How do I pause/delay in Javascript to slow it down?