floating-point - 是否有适合压缩 GPS 航路点的算法?

标签 floating-point gps compression coordinates gpx

我正在寻找有损压缩 GPS 航迹航路点的算法,其坐标为 EPSG:4326 CRS (通常的度数如 (75.223423,-10.123123))

简而言之,在清除元信息并使用 Ramer–Douglas–Peucker 算法进行简化后,我有一个有序的路点坐标序列,每个路点占用 16 个字节(2 x 8 字节 ).

利用航点有序的知识,并且大多数情况下航点之间的距离小于 0.01°(~1 km at equator),我做了一个假设,可能有某种此类序列的有损压缩算法。

你能帮我查一下吗

UPD:根据真实轨迹(分析了约 800 条轨迹),点之间的距离(以度为单位)如下所示。 P95 是所有距离的第 95 个百分位数。

LON    
    avg: 0,000334560520818109
    p95: 0,001239999999999240 # ~138 meters
    max: 0,307273900000000000
LAT    
    avg: 0,000221987685948093
    p95: 0,000839999999996621
    max: 0,309625799999999000

最佳答案

您不需要八字节浮点格式来表示您期望的有效数字的数量以及可能值的有限范围。我首先将数据转换为一系列具有适当长度的整数,这些整数可以表示您的值的准确性和范围。看起来两个四字节整数就足够了。那里有两倍的压缩。

然后将每个点替换为该点与前一个点的差异,第一个点除外。现在整数应该更小,允许任何通用无损压缩器进一步减少。如果差异仅在 0.1° 左右,您还可以得到两倍。

这是一个简单的例子,这个点的预测是最后一个点。如果您的点序列代表一条路径,您可以在建模速度时做一些更复杂的事情。在这种情况下,您使用最后建模的速度传播最后一个点,并从当前点中减去它。

修正案

我发现WGS84引用系本身精确到只有2-5米。使用三字节整数,您可以获得赤道 2.4 米的分辨率。在差分和压缩之前,这提供了 62.5% 的减少。它还为您提供了纬度的自由位,因为它的范围是经度的一半。该位可用于标记这是绝对坐标还是根据最后一个坐标预测的。

关于floating-point - 是否有适合压缩 GPS 航路点的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63255514/

相关文章:

bash - 如何在 bash/batch 脚本中递减浮点变量

iOS 比较 GPS 位置

android - GPS 提供商不返回我当前的位置 android

php - 通过 PHP 解压缩 .gz 文件

FPE 上的 C++ 返回值

python - 在 python(2.6) 中定义精度除法

android - 从 Android 本地主机 10.0.2.2 提供 GPS 坐标

python - 处理大文件的最佳 Python Zip 模块是什么?

algorithm - 整数序列的最佳压缩算法

ios - 什么是 NSNumberFormatter 默认 roundingMode