我有一个应用程序需要一次地对大量地址进行地理编码(~1500)。我正在使用Javascript Google Maps API Library v3来检索纬度和经度,并且信息存储在MySQL数据库中供以后使用。
显然这需要一段时间..我的代码将地址放入数组中,然后在数组上调用递归函数。该函数获取每个地址并尝试对其进行地理编码。如果地理编码成功,则函数继续下一个地址。如果地理编码返回ZERO_RESULTS
,则函数继续下一个地址。如果地理编码返回OVER_QUERY_LIMIT
,则该函数会使用setTimeout
暂停一段时间(存储在var timeout
中,然后重试。
现在我为timeout
尝试了很多不同的值,但它们的工作效果不同。最好的可能是2000
,或者两秒钟,这让我可以在365周围进行地理编码地址。但是,一旦程序编码了大约250个地址,它就会完全放慢速度,达到每10秒编码1个地址的程度。
那么..有谁知道如何加快这个过程?我目前还有一个计数器,用于检查在同一地址上调用该函数的次数(以跟踪在编码地址之前接收到多少OVER_QUERY_LIMIT
个错误)。我应该正常延迟2秒,然后如果同一地址接收OVER_QUERY_LIMIT
10次,延迟30秒或什么?
非常感谢任何帮助! 干杯
答案 0 :(得分:0)
您可以支付更高的限额或使用其他地理编码提供商。
我在SmartyStreets工作,这是一个这样的提供商,没有任何请求限制。 LiveAddress在云中扩展。与我们用于地理编码的数十亿和数亿的地址相比,1,500个地址并不多。我会让你自己做研究,但如果你curious就是这样的话:
var addr = {
street: "7584 E Big Canyon Dr.",
zipcode: "92808"
};
// If you don't have the address in component form, you could just pass
// in a string containing the entire address instead.
LiveAddress.geocode(addr, function(geo) {
alert("The address is at: " + geo.coords);
});