【问题标题】:Convert from 24 bit signed to latitude / longitude?从 24 位有符号转换为纬度/经度?
【发布时间】:2016-01-02 12:36:32
【问题描述】:

我有一些 gps 传感器数据,它们使用带符号的 24 位来分别表示纬度和经度。我想将这些数据转换为更易读的度、分和秒格式。

我进行了很多搜索,但没有一种算法适合我。我想在 python 中做到这一点。

规格表告诉以下内容

Byte [8] > Value: UP501接收纬度的MSB

Byte [9] > Value: UP501接收纬度的CSB

Byte [10] > Value: UP501接收纬度的LSB

字节 8、9 和 10 代表纬度。南北纬是 使用带符号的 24 位字进行编码,其中 -2^23 对应于 90° 南(南极)和 2^23- 1 对应于北纬 90°(北 极)。赤道对应0。

Byte [11] > Value: UP501 接收到的经度的 MSB

Byte [12] > Value: UP501 接收到的 CSB 经度

Byte [13] > Value: UP501 接收到的 LSB 经度

字节 11、12 和 13 表示经度。东西经度是 使用带符号的 24 位字编码,其中 -2^23 对应于 180° 西和 2^23 -1 对应于东 180°。格林威治子午线 对应于 0。

示例数据(8-13 个字节)

1E 55 9C 1C 69 5A

应该给 21°19′44″N,39°57′13″E

编辑: 在第一条评论之后,问题就在这里 我看到的每一个地方都是坐标的 32 位表示。这些方法对我不起作用,因为我没有得到我所期望的。甚至没有关闭。

这种转换有更好的方法吗?

【问题讨论】:

  • 那么,问题出在哪里?你尝试了什么,你在哪里卡住了?
  • 这有点难看;缩放因子根据您所在的 0 的哪一侧而有所不同。 (例如,有 2**12 个值代表南纬,但只有 2**12 - 1 个值代表北纬。)
  • 我试过 stackoverflow.com/questions/7151896/… stackoverflow.com/questions/17355604/… 我已经阅读了关于 SO 的其他解决方案,但到处都是 32 位无符号表示而不是 24 位有符号
  • @gbs 我不需要代码,我不是要代码。我可以自己编写代码。问题是我找不到转换算法。你知道我如何在数学上将此十六进制转换为纬度/经度吗?可以除以 x,乘以 y 等等?
  • lat 是int("1E559C", 16),我想每个学位都类似于93206.7,潜水会给21.328883171081543,但我对计算经纬度知之甚少

标签: python gps latitude-longitude


【解决方案1】:

这有点棘手,因为涉及到多个尺度。首先,将您的有符号值除以 2**23 - 1 以查看它代表的半球“分数”。

>>> 0x1e559c / (2.**23 - 1)
0.2369876190409206

那么,90 度的 23.69...% 是多少?

>>> 0x1e559c / (2.**23 - 1) * 90
21.328885713682855

21.something 度数;我们走在正确的轨道上。相反,请注意赤道和极点之间的纬度为 90*3600 秒。让我们看看我们有多少:

>>> 0x1e559c / (2.**23 - 1) * 90 * 3600
76783.98856925828

所以给定的值是赤道以北约 76784 秒;将其转换为度/分/秒:

# seconds to minutes and seconds
>>> divmod(76784, 60)
(1279, 44)

# minutes to degrees and minutes
>>> divmod(1279, 60)
(21, 19)

还有 21 度 19 分 44 秒。现在,我们知道除以2**23 - 1,因为我们知道该值小于 0x7fffff,所以在北半球。 (如果值在南半球,我们需要除以2**23,因为缩放是不对称的。)

对于经度,您将乘以每个半球的180*3600 秒而不是90*3600,然后以相同的方式继续。


一个警告;我没有包含南/西半球的示例,因为我不确定 90S 是 0x800000(二进制补码)还是 0xffffff(有符号幅度)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2015-05-11
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多