【发布时间】: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