我正在尝试将新的编码折线与现有折线合并,而不对整个折线进行解码和重新编码。新的编码折线将上传到(linux)服务器,我想将其附加到现有的折线。
问题是,你不能把它们混合在一起。下面是一些可以使用的示例数据。我希望在PHP或shell脚本中找到/创建一个解决方案,但问题是,我没有足够的技术理解来解释编码折线算法。
41.386692,-73.475912
41.424822,-73.375027
41.428292,-73.311173
41.426183,-73.254577
41.470168,-73.218532
41.498865,-73.155278
(Yes, 6 points are easy, but it's going to be more like 7,000 coordinate pairs)
yir{Fnwm_MimFquRuTanK
s`z{Fbpb~L{qGg`FkrDkjK
yir{Fnwm_MimFquRuTanKdLw`J{qGg`FkrDkjK
Interactive Polyline Encoder Utility
编码折线算法格式(您可以通过交互式编码器实现此目的)
Polyline Encoder
我还有两端编码折线的原始数据。所以我也可以分别保存第一个和最后一个坐标对。
我最后写了一篇博文,其中详细介绍了编码折线的工作原理。您可以在此处阅读:What is an Encoded Polyline?
答案 0 :(得分:9)
这显示了编码算法:http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
Mark McClure教授在http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/decode.html
提供解码器编码使用点到点的偏移(增量)。第一个点的偏移量从(0,0)计算,因此它等于第一个点的坐标。第二个点被编码为第一点的第二个点的偏移量,依此类推。
要连接两行,首先需要找到第一行的最后一个点,以及第二行的第一个点。
然后,计算从第一行的最后一个点开始的第二行的偏移量,并将该偏移量替换为第二行中的第一个坐标。因此,第二行不是以(0,0)的偏移量开始,而是从第一行的末尾开始的偏移量。
现在,第一行的最后一点需要重新编码,以表明还有更多要遵循的内容。
因为每一行中的每个编码点都可以包含可变数量的字符,所以在不解码整行的情况下找不到任何一点(即使是第一个)并不容易。
所以:要完成这项工作,你需要做一些解码和重新编码。将每一行解码为一个点数组然后重新编码整个事物可能是最容易的。 PHP编码快速简便 - 再次参见McClure的网站。
这与我在Google Maps Version 2群组中给出的答案相矛盾,我错误地假设每个编码点的长度严格为五个字符。
答案 1 :(得分:6)
好的,所以我想我明白了。非常感谢Andrew Leach解释算法如何以简单的英语实际运作。
问题:将新编码折线与现有编码折线合并
解决方案:保留现有折线的最后一个坐标对,只对该对进行编码并保存以供日后使用,在此新编码开始时使用现有折线编码所有新坐标。找到最后一个坐标对的字符串,并将其从新的编码折线中删除,并将新编码的折线粘贴到现有折线的背面
要了解的事项:编码的作用是计算偏移量(距离x,y的距离)并将该值转换为ASCII。问题是第一个坐标是从0,0计算出来的,所以如果你只是将两条编码折线放在一起,你添加的新坐标就不会偏离现有,但偏离0,0导致一个大的跳跃折线。我们需要做的是找出编码折线中哪些字符是0,0的偏移量并删除它们。然后你可以将新行附加到旧行,它将被正确偏移。
点击下面的链接查看所有内容,并附上好评。另外,如果您发现效率可以提高,请告诉我们!
答案 2 :(得分:0)
解码由浏览器执行。您可以为浏览器发送单独的线段以进行解码&串连。折线接受单个“路径”属性。多边形在路径数组中接受多个“路径”属性。折线和折线之间的唯一区别多边形是不存在或存在“填充”颜色& “填补”不透明度。如果您将折线声明为没有“填充”属性的多边形,则您将从各个部分构建多段线。
P.S。 - “stackoverflow”编辑器真的很糟糕。
答案 3 :(得分:0)
我建议您可以不必在服务器上进行连接。请在浏览器中执行此操作。所有解码都在浏览器中进行。使用javascript将解码后的数组拼接起来非常容易。您可以使用“拼接”方法,也可以只遍历每个组件数组。