Algorithm 谷歌地图编码多段线算法格式背后的设计决策是什么?
一些Google Maps产品都有多段线的概念,就底层数据而言,多段线基本上只是一系列的lat/lng点,例如,可以在地图上绘制的一条线中显示出来。Google Map developer库使用编码的多段线格式,该格式生成一个ASCII字符串,表示组成多段线的点。然后,通常使用Google库的内置函数或实现解码算法的第三方编写的函数对这种编码格式进行解码 文档中描述了多段线点的编码算法。没有描述的是以这种方式实现算法的原理,以及每个步骤的重要性。我很想知道这种方法实现算法背后的思想/目的是否在任何地方公开描述过。两个示例问题:Algorithm 谷歌地图编码多段线算法格式背后的设计决策是什么?,algorithm,google-maps,google-polyline,Algorithm,Google Maps,Google Polyline,一些Google Maps产品都有多段线的概念,就底层数据而言,多段线基本上只是一系列的lat/lng点,例如,可以在地图上绘制的一条线中显示出来。Google Map developer库使用编码的多段线格式,该格式生成一个ASCII字符串,表示组成多段线的点。然后,通常使用Google库的内置函数或实现解码算法的第三方编写的函数对这种编码格式进行解码 文档中描述了多段线点的编码算法。没有描述的是以这种方式实现算法的原理,以及每个步骤的重要性。我很想知道这种方法实现算法背后的思想/目的是否在任
- 这些步骤是否对压缩有可量化的影响?这些影响如何随点之间的增量而变化
- ASCII 63的值求和是某种兼容性黑客吗
- 一个双精度值存储在多个5位块中,0x20(二进制“0010 0000”)用于指示下一个5位条目属于当前双精度值
- 0x1f(二进制“0001 1111”)用作位掩码以丢弃其他位
- 我希望使用5位,因为lat或LON的增量在此范围内。因此,在许多示例中,每个双精度值平均只占用5位(但尚未验证)
- 现在,压缩是通过假设附近的双精度值非常接近,并且产生的差值接近于0来完成的,因此结果适合于几个字节。然后,该结果以动态方式存储:存储5位,如果值较长,则用0x20标记并存储下一个5位,依此类推。所以我想你可以调整压缩,如果你尝试6或4位,但我想5是一个几乎合理的选择
- 现在关于magic 63,这是0x3f和二进制0011111。我不知道他们为什么加上它。我认为添加63将提供一些“更好”的asci字符(例如XML或URL中允许的字符),例如跳过62,它是
,但63是
真的更好吗?至少第一个ascii字符是不可显示的,必须避免。请注意,如果使用64,那么将命中ascii字符127,最大值为31(31+64+32),并且该字符在html4中没有定义。或者是因为一个有符号的字符从-128变为127,我们需要将负数存储为正数,从而添加最大可能的负数?
- 仅限我:是一个指向具有Apache许可证的正式Java实现的链接