我在使用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而失败。
任何人都可以确认这是一个网址长度问题吗?
我尝试在路径上进行自己的子采样,并将我想要的高程数据作为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可能正在进行某种进一步的压缩形式,或者我在计算中出错了什么?
答案 0 :(得分:2)
您的怀疑是正确的,这是一个URL长度问题。如果您在提交请求时打开了Chrome的开发者工具,则会看到HTTP 414(Request-URI Too Large)错误。 URL大约为3000个字符,大约1000个字符(2048是常见的最大URL长度)。
Google Maps API在内部将所有这些点转换为看起来像encoded polyline的点,这有助于压缩数据,但对于这条很长的路径来说显然还不够。当你知道你将要包括多于N个点时,将你的请求分成多个部分可能是值得的(我会尝试使用N来查看哪些有效)。