1

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

任何帮助深表感谢!干杯

4

1 回答 1

0

您可以支付更高的限制或使用不同的地理编码提供商。

我在 SmartyStreets 工作,这是一家这样的提供商,没有请求限制。LiveAddress在云中扩展。与我们习惯于进行地理编码的数以千万计的地址相比,1,500 个地址并不算多。当然,我会让你自己研究,但如果你好奇它是什么样的:

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);
});
于 2013-02-16T01:55:28.233 回答