polyline.encode 奇怪的格式

polyline.encode strange format

我正在使用 google 的折线,我想给出一组坐标并生成正确的折线,反之亦然。特别是最后我想 url 编码结果(折线)。 当我插入一条多段线时:

code = '%28%28akntGkozv%40kcCka%40us%40y%7BDfvAm%7BBnuCj_Aus%40fzG%29%29'

我使用 polyline 包:https://pypi.org/project/polyline/,首先我解码折线以查看坐标:

coordinates = polyline.decode(code)
print(coordinates)
>> [(3e-05, -0.0001), (-0.0001, -7e-05), (-0.0002, -0.0002), (45.46221, 35.36626), (45.4621, 35.36617), (45.48328, 35.39727), (45.48317, 35.39718), (45.5172, 35.39707), (45.51711, 35.39816), (45.51723, 35.39814), (45.5172, 35.38418), (45.51823, 35.3843), (45.51821, 35.38428), (45.49413, 35.37398), (45.52816, 35.37387), (45.52807, 35.32855), (45.5281, 35.32845), (45.52823, 35.32848), (45.52813, 35.32861)]

这里一切都很好,当我尝试将坐标编码回折线时出现问题(这是我的最终目标,因为最后我想给出一些坐标并获得相应的折线)

new_code = polyline.encode(coordinates)
print(new_code)
>> ERXERXakntGkozvETPkcCkaETPusETPyEWBDfvAmEWBBnuCj_AusETPfzGERYERY

这与原来的略有不同,如果放回 url 它就不起作用!

所以我的问题是:

  1. 什么样的编码是new_code我试过使用urllib.parse.quote(new_code)按百分比url编码但结果完全一样,也许我需要指定一些特定的编码风格,但我没有找到任何东西。

  2. 我用的折线是米兰城内的一个正方形(所以只需要4个点,最多5个点就可以识别这个区域),但是坐标结果来自polyline.decode 给我返回一个列表,其中包含 19 个点,其坐标甚至离米兰市都不近。 为什么?

好吧,基本上我所有的问题都来自于我正在考虑的字符串:%28%28akntGkozv%40kcCka%40us%40y%7BDfvAm%7BBnuCj_Aus%40fzG%29%29 包含 %28%28%29%29,它们 不是多段线 的一部分,而是由特定的 [= 插入的两个 (()) 27=] 我正在使用的网站。一个简单的替换和编码 return 正确的折线:

code = '%28%28akntGkozv%40kcCka%40us%40y%7BDfvAm%7BBnuCj_Aus%40fzG%29%29'
code = code.replace('%28', '').replace('%29', '')
code = urllib.parse.unquote(code)
print(code)
>> irotG_hzv@woBmE}i@yjE`oBwkDf|ChRhMzeG}~BxcB

事实上,如果在 polyline.decode return 中放入我使用的坐标:

coordinates = polyline.decode(code)
print(coordinates)
>> [(45.46869, 9.15088), (45.48673, 9.15191), (45.4936, 9.18452), (45.47567, 9.21216), (45.45051, 9.20907), (45.44822, 9.16701), (45.46869, 9.15088)]

恰好是 7(现在我改变了形状,所以是六边形而不是正方形)并且正好指向米兰市