gpt4 book ai didi

encoding - 用于存储纬度和经度的正确/最佳类型

转载 作者:行者123 更新时间:2023-12-01 22:25:34 24 4
gpt4 key购买 nike

在 C、C++ 或 D 等系统级编程语言中,存储纬度和经度的最佳类型/编码是什么?

我看到的选项是:

  • IEEE-754 FP 以度或弧度表示
  • 以 32 或 64 位整数形式存储为定点值的度数或弧度
  • 整数范围到度数范围的映射:-> deg = (360/2^32)*val
  • 度、分、秒和小数秒存储为 int 中的位字段
  • 某种结构。

简单解决方案(FP)的主要缺点是它的分辨率非常不均匀(在英国的某个地方它可以以微米为单位进行测量,而在日本则不能)。这也存在 FP 比较等问题。其他选项需要在数据生命周期的不同部分付出额外的努力。 (生成、演示、计算等)

一个有趣的选择是 float 精度类型,随着纬度的增加,它会获得更多的位,而经度会变得更少(因为它们向两极靠得更近)。

未完全涵盖此内容的相关问题:

<小时/>

顺便说一句:32 位在赤道处的 E/W 分辨率约为 0.3 英寸。这接近高级 GPS 设置可以工作的范围(IIRC 在某些模式下它们可以降至约 0.5 英寸) .

OTOH,如果 32 位均匀分布在地球表面,您可以索引边长约为 344m 的正方形,5 字节给出 21m、6B->1.3m 和 8B->5mm。

我现在没有具体的用途,但以前曾使用过此类东西,并希望在某个时候再次使用。

最佳答案

最简单的方法是将其存储为以度为单位的 float / double 。 N 和 E 为正值,S 和 W 为负值。请记住,分钟和秒的满分都是 60(因此 31 45'N 为 31.75)。通过查看这些值很容易理解它们的含义,并且在必要时,转换为弧度也很简单。

纬度和经度的计算,例如Great Circle两个坐标之间的距离很大程度上依赖于三角函数,三角函数通常使用 double 。任何其他格式至少都依赖于正弦、余弦、atan2 和平方根的另一种实现。任意精度数字(例如 Java 中的 BigDecimal)对此不起作用。像 int 这样的 2^32 均匀分布的东西也会有类似的问题。

一些评论中提到了统一点。对此,我只想指出,地球的经度并不均匀。北极圈的一弧秒经度比赤道的距离短。 double 浮标可在地球任何地方提供亚毫米精度。这还不够吗?如果没有,为什么不呢?

还值得注意的是您想要如何处理这些信息,因为您所需的计算类型将会影响您使用的存储格式。

关于encoding - 用于存储纬度和经度的正确/最佳类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com