通过jquery geocoder.geocode解决地理编码问题(400项)

我试图用400个地址解析一个json并在每个位置设置地图图标。 我的问题是,当我循环这些项目时,我收到一个错误:OVER_QUERY_LIMIT。 但是使用谷歌地理编码API设置位置的最佳方法是什么? 我的function看起来像这样:

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: '

'+item.name+'

'+ street + zip + city +'

' } }); } else { console.log('not geocoded'); console.log('status'); console.log(status); } }); }, 1000); } } map.addMarkers(markers_data); }

我试图将我的geocoder.geocode函数放在超时函数中,但遗憾的是这不会有帮助。 我在我的js中使用插件gmaps.js。

如文档中所述,地理编码器服务有每会话配额:

无论有多少用户共享同一项目,每个用户会话都应用速率限制。 首次加载API时,将为您分配初始请求配额。 使用此配额后,API会按每秒对其他请求强制执行速率限制。 如果在特定时间段内发出的请求太多,则API会返回OVER_QUERY_LIMIT响应代码。

每会话速率限制可防止对批处理请求使用客户端服务,例如批量地理编码。 对于批量请求,请使用Google Maps Geocoding API网络服务。

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

因此,您应该限制客户端调用并在最初的10个请求后每秒执行1个请求,或者使用Geocoding API Web服务实现服务器端批量地理编码,每秒最多可以有50个请求。

顺便说一句,您可以尝试在1秒后执行所有请求。 您应该为每个下一个请求增加延迟。

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

因此第一个请求将立即执行,第二个请求将在1秒后执行,第三个请求将在2秒后执行,依此类推。