【问题标题】:Hitting `OVER_QUERY_LIMIT` error using the Google Elevation Service for any more than 2 requests使用 Google Elevation Service 处理超过 2 个请求时出现“OVER_QUERY_LIMIT”错误
【发布时间】:2018-03-15 12:13:00
【问题描述】:

前提

我正在使用 Google Elevation Service 来获取路径上所有节点的高度,并由用户绘制到 Leaflet 地图上。这允许我生成一个海拔图。目前,如果我提出超过 2 个请求(每个请求限制为 512 个位置),我总是点击OVER_QUERY_LIMIT

使用政策

  • 每天 2,500 个免费请求,按客户端和服务器端查询的总和计算;启用计费以获得更高的每日配额,按 0.50 美元/1000 个额外请求计费,每天最多 100,000 个请求。
  • 每个请求 512 个位置。
  • 每秒 50 个请求*,计算为客户端和服务器端查询的总和。

来自Google Elevation Service Site

我知道我每天没有达到 2500 个请求(可以在开发者控制台中查看已发出多少个请求)。我也知道每个请求肯定有 512 个位置,因此唯一达到的配额是每秒 50 个请求。

方法

为了处理大量节点,我正在执行以下操作:

  1. 输入要运行的节点列表
  2. 从列表中获取第一个块(512 个位置)
  3. 使用该块进行 API 调用
  4. 将返回的高程附加到数组中
  5. 等待 1 秒
  6. 从 2 到 5 循环,直到列表耗尽

实际代码:Codepen

如果我在每个请求之间设置大量等待时间(比如 5 秒),则请求可以正常发送,但据我所知,我应该能够每秒发送 50 个请求 - 所以一个包含 10,000 个节点的列表应该接受 20 个请求,理论上甚至不需要等待 - 但即使等待它也会遇到错误。

【问题讨论】:

    标签: javascript google-elevation-api


    【解决方案1】:

    首先检查来自here的答案

    我不确定,但您可以使用 thisthis 传单插件检查。

    Google 文章已经documented 与您目前面临的相同问题。并给出一些solutions also

    我也检查了你的 Codepen。

    如果您只有 Google 提升服务选项,那么您需要检查一些逻辑,例如:

    • 尝试使用不同的 Google API 密钥复制相同的代码并合并结果。
    • 检查是否可以在使用 5-6 个不同 API 密钥的 for 循环中导入 Google API 脚本 CDN。

    最后一个选项是使用 Google Maps APIs for Work 许可证

    重要提示:请更改或使用您在 codepen 中使用的演示 Google API 密钥。因为任何人都可以使用您的密钥。或保护它免受 Google API 控制台的影响 在接受来自这些 HTTP 引荐来源网址(网站)的请求下,您可以在此处将密钥限制为您的域名。

    【讨论】:

    • 为指针干杯 - 提到的插件肯定有一些解决方法,以及 API 密钥轮换等,但我想深入了解这一点,并弄清楚为什么这段代码是据我所知,达到配额限制 - 它应该在限制范围内。都一样干杯
    【解决方案2】:

    似乎还有另一个限制:5 秒窗口内有 1024 个位置。因此,每个 512 个位置的 2 个请求、256 个位置的 4 个、128 个位置的 8 个等都可以工作,但是您必须等待 5 秒才能等待下一个请求。我认为每秒 50 个请求的限制只有在总位置数为 1024 或更少时才会生效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      相关资源
      最近更新 更多