Google Maps API v3地理编码OVER_QUERY_LIMIT

时间:2013-02-15 23:45:13

标签: javascript google-maps-api-3 geocoding

我有一个应用程序需要一次地对大量地址进行地理编码(~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秒或什么?

非常感谢任何帮助! 干杯

1 个答案:

答案 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);
});