使用谷歌地图时 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 在使用谷歌地图时崩溃

颤动谷歌地图在运行时更新地图样式

使用谷歌地图颤动单击按钮时如何激活位置?

Android Jetpack compose:使用谷歌地图在地图创建时崩溃

使用谷歌地图时作为未定义的第一个孩子出现错误

单击其他时更改谷歌地图标记图标