使用谷歌地图时 OVER_QUERY_LIMIT
Posted
技术标签:
【中文标题】使用谷歌地图时 OVER_QUERY_LIMIT【英文标题】:OVER_QUERY_LIMIT while using google maps 【发布时间】:2011-04-01 13:55:12 【问题描述】:我在从我的应用程序访问 google 地图时遇到问题,当我从 java 脚本循环发送超过 10 个请求时,我从地理编码器服务中收到 OVER_QUERY_LIMIT 异常。 有什么办法可以摆脱这个,我尝试使用 setInterval() 等来延迟一些时间。但是没有用。
【问题讨论】:
How do I Geocode 20 addresses without receiving a OVER_QUERY_LIMIT response? 的可能重复项 在这个问题中,我提出了一个答案,它将继续发送请求,直到它们都成功:***.com/questions/7649155/… 看这里:***.com/questions/16659398/… How do I Geocode 20 addresses without receiving an OVER_QUERY_LIMIT response?的可能重复 【参考方案1】:可能您每秒发送的请求太多,Google 不允许您这样做。
阅读http://code.google.com/apis/maps/faq.html#geocoder_classorhttp
【讨论】:
【参考方案2】:javascript API 中的地理编码是有速率限制的。首次加载 API 时,您可以发送 10 个地址地理编码请求或 5 个反向(latlng)地理编码请求,然后才能收到 OVER_QUERY_LIMIT 响应。当您这样做时,请使用“exponential backoff”来延迟您的查询。
您可能还想加入Issue 4805 (gmaps-api-issues) 中的讨论。
【讨论】:
【参考方案3】:如果您使用自动完成功能,请尝试使用 Google 的 Places Autocomplete API。 (尽管这不是他所问的,但我想很多人会从这个问题来到这里)
【讨论】:
【参考方案4】:有一个 API 列表,并为每个请求随机使用它们。 以python为例
like 键 = [key1,key1,key3....]
location = Geocoder(random.choice(keys)).geocode(address)
或
location = Geocoder(random.choice(keys)).reverse_geocode(Lat,Long)
根据您的要求
【讨论】:
【参考方案5】:首先阅读这篇文章。 https://developers.google.com/maps/premium/previous-licenses/articles/usage-limits
如果您在一秒钟内发送许多请求,请使用延迟方法。
function sleep(milliSeconds)
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
在你的循环结构中调用这个方法。 睡眠(2200);
【讨论】:
【参考方案6】:我们可以使用ajax队列。
一次将执行 20 个 ajax 请求,其他的将在队列中等待。
创建多个地理编码密钥并保存在一个数组中,并为每个 ajax 请求随机使用它。
我在这里加载了 2200 个标记。添加 2200 个位置大约需要 1 分钟。
<https://jsfiddle.net/suchg/qm1pqunz/11/>
【讨论】:
此解决方案可能违反 ToS,paragraph 10.4b以上是关于使用谷歌地图时 OVER_QUERY_LIMIT的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Android App 在使用谷歌地图时崩溃