【发布时间】:2012-07-10 08:01:45
【问题描述】:
我在使用 Google maps V3 JavaScript 高程服务时遇到了问题。
根据 google 群组发布 (https://groups.google.com/forum/#!msg/google-maps-js-api-v3/Z6uh9HwZD_k/G1ur1SJN7fkJ),似乎如果您使用 getElevationAlongPath() 它会压缩整个路径并将其作为 Ajax GET 请求发送到 Google 服务器,并在其服务器上对其进行二次采样。这意味着,如果您有大量路径段,则编码的 URL 会超过最大 URL 长度,并且请求会失败并显示 UNKNOWN_ERROR。
谁能确认这是 URL 长度问题?
我尝试沿路径进行自己的二次采样,并仅将我想要高程数据的点作为 getElevationForLocations() 请求发送。这似乎是一种改进,但我仍然收到一些 UNKNOWN_ERROR 响应。这些都是不可预知的。有时,400 分的请求会成功返回。其他请求将失败,仅通过 300 分。我猜这仍然是 URL 长度的问题(假设 getElevationForLocations() 也会向 Google 发送 URL 编码的数据)。
文档说“你可以在一个数组中传递任意数量的多个坐标,只要你不超过服务配额。”好像不是这样的。
对于从长路径获取大量高程数据点(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 可能正在进行某种形式的压缩,或者我的计算有问题?
【问题讨论】:
-
你有链接到一个重现这个的例子吗?
-
要复制到gb.mapometer.com/cycling/route_2113760.html,然后点击“显示高度”按钮(地图左下角)。有很长的停顿,然后是 UNKNOWN_ERROR。我已经使用调试器跟踪了这一点,并且发送的数据似乎很好。
-
感谢@ColinK 提出这个问题,我面临与您相同的问题,我需要为提升请求发送多个位置,但 URI 变得太大,协议无法接受并且处理它。似乎我必须多次执行这些请求。如果您有任何建议,4 年后,请告诉我 :)
标签: google-maps-api-3 elevation