【发布时间】:2020-11-08 09:30:25
【问题描述】:
我想使用一个简单的 JavaScript 文件在 gGogle 地图上打印多个图钉。 我收到了这个错误:
地理编码不成功,原因如下:OVER_QUERY_LIMIT
然后我google了一下,基本上有2个可能的问题:
- API 密钥未启用地理定位
- 每秒查询数次
好吧,我的 api 启用了地理定位,并且我在每次迭代后添加了一个 sleep 函数。
这个错误有些奇怪,因为它...停止,然后又重新启动...我在代码中添加了 cmets:
//arrays of addresses
var addressesFoodAndDrink = [ // all these addresses are printed
"fuori stile, riva del garda",
"agraria, riva del garda",
"officina del panino, riva del garda",
"le foci di rita, varone, riva el garda",
"le servite, san giorgio, tn",
"la caneva bistrot, riva del garda",
"la colombera, riva del garda",
"ristorante panorama, pregasine"
];
var addressesShopping = [
"poli, arco, trento", // printed
"despar, arco", // printed
"lidl, riva del garda", // printed
"penny, arco" // error !!!!
];
var addressesHome = ["pause lake garda, san giorgio"]; // printed
// icons
var iconFoodAndDrink = "food.png";
var iconHome = "home.png";
var iconShopping = "shopping.png";
function codeAddress(geocoder, map, addresses, icon) {
// sleep in order to avoid to many queries
sleep(2000);
addresses.forEach(function (item, index, array){
// ADDED SLEEP
sleep(200);
geocoder.geocode({'address': item}, function(results, status) {
if (status === 'OK') {
map.setCenter(results[0].geometry.location);
map.setZoom(13);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon: icon
});
console.log("gocoder ok");
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
})
}
function initMap() {
var geocoder;
geocoder = new google.maps.Geocoder();
var map = new google.maps.Map(document.getElementById('map'), {zoom: 14, center: {lat: 45.8993532, lng: 10.8666372}});
// geocoding the first array
codeAddress(geocoder, map, addressesFoodAndDrink, iconFoodAndDrink);
// geocoding the second array with error
codeAddress(geocoder, map, addressesShopping, iconShopping); // The error is generated here, at the forth element which is not printed
// geocoding the first array
codeAddress(geocoder, map, addressesHome, iconHome); // but this is printed, wired
}
function sleep(s){
var now = new Date().getTime();
while(new Date().getTime() < now + (s)){ /* do nothing */ }
}
有什么想法吗?
【问题讨论】:
-
请阅读docs。
-
类似问题:stackoverflow.com/questions/57511554/async-and-await/57513095。尝试按照那里的说明应用指数退避方法。
-
@xomena,谢谢它的工作。
标签: javascript google-maps google-api google-geolocation