Google Javascript API 地理编码限制
Posted
技术标签:
【中文标题】Google Javascript API 地理编码限制【英文标题】:Google Javascript API Geocoding Limits 【发布时间】:2013-12-03 23:24:10 【问题描述】:使用 Google Maps javascript API v3 进行客户端地理编码的限制是什么?
我的研究:
-
Google Maps php API 限制每天 2500 个地理编码请求 (https://developers.google.com/maps/documentation/geocoding/#Limits)
Google Maps Javascript API v3 限制为每天 25000 次地图加载 (https://developers.google.com/maps/documentation/javascript/usage)
Google 建议使用 javascript API 进行地理编码以避免通过 PHP API 的 2500 限制。它指出“运行客户端地理编码,您通常不必担心您的配额”(https://developers.google.com/maps/articles/geocodestrat#client)
但是,任何文档中都没有说明通过 Google Maps JavaScript API v.3 的地理编码限制是什么。
(这个问题困扰了我一段时间,我研究了不止一次,都没有找到可靠的答案)
【问题讨论】:
【参考方案1】:我在 Google 的 Maps for Business 支持部门工作。以下是我个人的观点,不是谷歌的,但我只是说我对这个话题相当熟悉!
首先,区分client-side geocoding(对google.maps.Geocoder 的JavaScript 调用)和server-side geocoding(对/maps/api/geocode 的HTTP 请求)很重要。这个问题和答案专门针对客户端地理编码;有关服务器端限制,请参阅 here。特别是,经常提到的每个 IP 每天 2,500 个请求的限制仅适用于服务器端地理编码,而不适用于客户端。
所以简短的回答是,没有专门针对客户端地理编码的记录查询限制。一旦客户端加载了 Google Maps JavaScript API 库,它就可以发出任意数量的地理编码请求,前提是它们以正常的速度完成。两条经验法则可确保您不会遇到问题:
-
启动地理编码以响应用户交互,即使有短暂的请求突发(例如,单击一个按钮对多个地址进行地理编码),您也不会受到影响。
捕获任何 OVER_QUERY_LIMIT 错误并优雅地处理它们(例如指数退避)。 Here 是 Python 中的一些示例代码。
但请不要试图忙着循环地理编码器或连续数小时不停地敲打它,有防止滥用的保护措施。
更新
截至 2017 年,客户端配额是根据相应的 Web 服务配额计算的。请看一下 Christophe Roussy 的回答。
【讨论】:
这就是我一直在寻找的答案(我希望 Google 附属人员能加入进来,太完美了!)。 这是否适用于对 google.maps 命名空间的客户端调用?或者这只是针对地理编码信息的 JSON 请求? “这个问题和答案专门针对客户端地理编码。” 那么,所谓的客户端地理编码是否只适用于javascript客户端?如果在我的情况下,很多移动原生应用程序客户端向地理编码服务(或更准确地说,Google Places NearbySearch API)发送 HTTP 请求,我是否仍然受到服务器端配额的限制?希望@jpatokal 可以详细说明。提前致谢! 客户端 = 对 google.maps.Geocoder 对象的 JavaScript 调用,服务器端 = 对 /maps/api/geocode 的 HTTP 请求。您正在调用 HTTP 服务,所以它是服务器端的。但是,Places API 是一个完全不同的服务,有自己的规则:developers.google.com/places/usage【参考方案2】:总是阅读您可以在 Google 官方网站 上找到的最新信息以获取正确的 API 版本,过时的 *** 答案不是最新的参考! !
https://developers.google.com/maps/documentation/geocoding/usage-limits
这是我写这个答案时所说的:
Google Maps Geocoding API 使用限制
每天 2,500 个免费请求,计算为客户端和客户端的总和 服务器端查询。
每秒 50 个请求,计算为客户端的 sum 和 服务器端查询。
启用即用即付计费以解锁更高的配额:
0.50 美元/1000 个额外请求,每天最多 100,000 个。
总的来说,只要查询来自真实的人类用户,我认为 Google 会很高兴,因为这对他们来说是有价值的。
还有一些方法可以通过将结果缓存长达 30 天来保存一些请求: https://developers.google.com/maps/premium/optimize-web-services#optimize
【讨论】:
【参考方案3】:基于https://developers.google.com/maps/articles/geocodestrat,
通过浏览器进行的客户端地理编码受每张地图的速率限制 会话,因此地理编码分布在您的所有用户和 随您的用户群扩展。
那么,每个地图会话的速率限制是多少?
由于地理编码限制是针对每个用户会话的,因此您的 随着用户群的增长,应用程序将达到全局限制。 客户端地理编码不会面临配额限制,除非您执行 用户会话中的一批地理编码请求。因此,运行 客户端地理编码,您通常不必担心您的 配额。
好的,限制是多少?我们来了
https://developers.google.com/maps/documentation/business/articles/usage_limits
具有速率限制或 10 QPS(每秒查询数),发送 11 日 请求您的应用程序应该检查第一个时间戳 请求并等待 1 秒过去。应该同样适用 达到每日限额。
还是不清楚?我也是。
这是我从他们的文档中找到的秘密答案,上面写着“每秒 10 个请求的速率限制”
https://developers.google.com/maps/documentation/business/webservices/quota
我不认为一个用户会话每秒可以发送 10 个请求,因此我认为它是无限的。
【讨论】:
您链接到的“使用限制”文章是关于 Web 服务(服务器端),而不是客户端。此外,10 QPS 是 Maps for Business 对服务器端地理编码的限制,而不是免费 API 用户限制(即 1 QPS)。 “我不认为一个用户会话每秒可以发送 10 个请求,因此我认为它是无限的。”如果我想为显示 20 个地址的用户显示地图怎么办?然后我想尽快显示它们,所以每秒 20 个请求是非常有可能的。那么我是否必须放慢速度并让用户等待? Google 喜欢客户端用户查询,因为他们可以从人类地理编码需求中获取信息(有利于广告...)。这就是为什么限制在这种情况下要好得多。【参考方案4】:我最近询问了有关 Places 库的问题(或者更确切地说,研究了它并得出了一个结论):
Regarding Places Library for Google Maps API Quota limits
基本上,似乎每个域每天使用密钥加载的地图限制为 25,000 个(这可能不正确,但我很确定情况就是这样)。
地理编码限制在以下方面受到限制:
2,500(如果您使用 API 密钥但未设置结算) 100,000(如果您使用 API 密钥并设置了计费)
如果您正在执行服务器端地理编码(预缓存结果或类似的),那么您的地理编码是按域进行的,您很快就会用完请求。 (即,如果您使用 REST API 进行场所请求,类似于:https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=XXXX
)
如果您使用的是 javascript 库,请使用自动完成功能或 PlacesService,如下所示:
service = new google.maps.Geocoder();
那么限制(分别为 2,500 或 100,000)是针对每个最终用户的,因此您的限制与您的用户群成比例。
【讨论】:
有趣。那么您是否建议每个客户端限制 2,500 个地理编码 API? (即:一个用户来到我的网站,一天可以执行 2,500 次地理编码?) 是的,这就是我所理解的。您可以通过查看 API 控制台来测试这一点,并手动运行几次 REST 调用,您将看到配额计数发生了变化。但是,如果您使用 JS API 中的地理编码服务执行相同的请求,您不会看到更改,因为限制是针对每个客户端的,因此不会影响您的总体限制。 您的基本想法是正确的,但细节错误:客户端地理编码没有 2,500 个每位最终用户的限制。【参考方案5】:根据the article you linked(在何时使用服务器端地理编码下):
每个 IP 地址的请求限制为 2,500 个。
那么 - 你所说的限制究竟是什么意思?托管应用程序或运行它的客户端的限制?
上面的陈述告诉我,“主机”没有限制;如果没有密钥或可执行的引用 URL,Google 就没有(好的)方法来确定地理编码请求的来源。这就是 REST 的魅力所在。
它还告诉我,即使他们可以强制执行,他们也没有设置限制。这可能会对他们的商业模式产生反作用。
【讨论】:
这个答案不正确。 2,500 个请求/IP/天的限制适用于服务器端地理编码,而不是客户端地理编码。 再次,他们将如何确定差异?如果它是您的服务器提供地理编码结果,您能确定差异吗?另外,我的回答和你的有什么不同? 糟糕,抱歉,没有正确解析您的其余答案!所以是的,您的结论是正确的,即使每个 IP 限制 2,500 个请求是一个红鲱鱼(它不适用于客户端地理编码)。请对您的答案进行编辑,以便我可以取消对您的投票;) @klugerama 通过 IP 地址。您的服务器在 1 个 IP 地址上运行,您的客户端在多个 IP 地址上运行。您的客户端调用将基于 Jscript,并且每个客户端都加载自己的 API 实例。 @user3308043 是的,这正是我要说的。服务器端应用程序没有限制,因为它不进行实际的 API 调用 - 每个客户端都进行。以上是关于Google Javascript API 地理编码限制的主要内容,如果未能解决你的问题,请参考以下文章
javascript 只从Google Maps API反向地理编码器获取城市和州
Google Maps JavaScript API 地理位置标记
使用 Google Maps Javascript API V3 反向地理编码检索邮政编码
Google API地理编码在运行时使用JavaScript错误
使 JavaScript Google API 地理编码发生在鼠标点击而不是页面加载上
php 使用一个用于JavaScript地图显示的Google Maps API密钥(活动日历)和用于场地地理位置查找的不同API密钥(事件