3

我在使用 Google 地图 V3 JavaScript 高程服务时遇到了困难。

根据谷歌组发布(https://groups.google.com/forum/#!msg/google-maps-js-api-v3/Z6uh9HwZD_k/G1ur1SJN7fkJ),如果您使用 getElevationAlongPath() 它会压缩并发送Google 服务器的整个路径作为 Ajax GET 请求,并在其服务器上对其进行子采样。这意味着,如果您有大量路径段,则编码的 URL 会超过最大 URL 长度,并且请求会失败并显示 UNKNOWN_ERROR。

谁能确认这是 URL 长度问题?

我尝试沿路径进行自己的二次采样,并仅将我想要高程数据的点作为 getElevationForLocations() 请求发送。这似乎是一种改进,但我仍然收到一些 UNKNOWN_ERROR 响应。这些都是不可预知的。有时,400 分的请求会成功返回。其他请求将失败,仅通过 300 分。我猜这仍然是 URL 长度的问题(假设 getElevationForLocations() 也将 URL 编码的数据发送到 Google)。

文档说“你可以在一个数组中传递任意数量的多个坐标,只要你不超过服务配额。” 情况似乎并非如此。

有没有人对从长路径获取大量高程数据点(500?)的可靠方法有任何建议?

谢谢,科林


经过一番挖掘,似乎是这种情况。

用于提升的 JavaScript API 在幕后使用 HTTP 提升服务。HTTP 提升服务文档确实说请求限制为 2048 个字符。但是,如果您直接使用 HTTP 服务,您将构建自己的 URL。这意味着您可以在发送前检查长度。如果您使用 JavaScript API,则会为您构建 URL,但 API 代码不会在发送前检查 URL 长度。

调用端点 URL 和必要的参数占用 78 个字符,剩下 1970 个字符用于编码点。

这就是它变得混乱的地方。编码点中的字符数随 lat 和 lng 值的大小和精度而变化。通常,每点 8 到 12 个字符之间。一个额外的复杂性是路径编码中使用的一些字符可能需要 URL 编码 - 进一步增加每个点所需的字符数,但可能会增加一个未知的数量(每个需要 URL 编码的路径字符有 2 个额外字符) )。

所有这些复杂性意味着,理论上,调用导致 URL 过长只有 55 个点是可能的——尽管非常非常不可能。一个安全的限制可能是 150 点(但这有时仍然会失败)。200 应该大部分时间都可以工作。250应该是最大值。

实际上,从少数测试中: - 每次工作 200 个 - 通常工作 300 个 - 有时工作 400 个

计算和测试之间的差异表明 JavaScript API 可能正在进行某种形式的压缩,或者我的计算有问题?

4

1 回答 1

2

您的怀疑是正确的,这是 URL 长度问题。如果您在提交请求时打开了 Chrome 的开发者工具,您将看到 HTTP 414(请求 URI 太大)错误。URL 大约有 3000 个字符,大约 1000 个字符太多(2048 是常见的最大 URL 长度)。

在内部,Google Maps API 将所有这些点转换为看起来像编码折线的东西,这有助于压缩数据,但对于这条非常长的路径来说显然是不够的。当您知道您将包含超过 N 个点时,将请求分成多个部分可能是值得的(我会尝试使用 N 来查看哪些有效)。

于 2012-07-11T18:28:08.937 回答