2013-02-15 118 views
0

我有一个应用程序需要一次对大量地址进行地理编码(〜1500)。我使用JavaScript Google Maps API Library v3来检索经度和纬度,并将信息存储在MySQL数据库中供以后使用。Google Maps API v3地理编码OVER_QUERY_LIMIT

显然这需要一段时间..我的代码将地址放入数组,然后调用数组的递归函数。该函数获取每个地址并尝试对其进行地址解析。如果地址解析成功,该函数将继续执行下一个地址。如果地址解析返回ZERO_RESULTS,则函数继续执行下一个地址。如果地址解析返回OVER_QUERY_LIMIT,该函数使用setTimeout暂停的时间(存储在var timeout一组量,然后再重试。

现在,我已经尝试了timeout许多不同的价值观,他们以及他们如何工作的不同..最好的可能是2000或两秒钟,这使我可以对365个地址进行地理编码,但是一旦程序编码了大约250个地址,它就完全慢下来,直到它每隔10秒编码一个地址..

所以..有谁知道如何加快这个过程?我也有一个计数器,检查多少次函数被调用在同一地址(跟踪多少01在编码地址之前接收到错误)。我是否应该正常延迟2秒,然后如果同一地址收到OVER_QUERY_LIMIT 10次,延迟30秒或什么?

任何帮助非常感谢! Cheers

+3

服务器端地理通过地址解析网络服务具有每天每IP 500个问询的一个名额,所以一天中的所有请求都会计入配额。另外,Web服务是速率受限的,因此请求过快会导致阻塞。通过浏览器进行客户端地理编码的速度受限于每个地图会话,因此地理编码分布在所有用户中,并随用户群一起扩展。地理编码配额和速率限制推动了本文中概述的策略。 https://developers.google.com/maps/articles/geocodestrat – Andrew 2013-02-15 23:52:13

+0

此外,也许这可能有所帮助:http://gmaps-samples.googlecode.com/svn/trunk/spreadsheetsgeocoder/geocodespreadsheet.htm – Andrew 2013-02-15 23:54:35

回答

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); 
}); 
相关问题