从Zenec trk文件解码GPS十六进制数据

时间:2017-05-19 08:32:26

标签: c# gps hex

我正在尝试用C#编写一个程序,将从我的Zenec GPS单元下载的trk文件中的以下原始数据转换为更易读的格式

4A23EA5899007C06E33E451CFC0300009C190000

我的Zenec上显示的数据显示了我的目标:

Time: 2017-04-09 12:04:26
Latitude: 56.540981650
Longitude: 12.968768239
Altitude: 20.0
Speed(km/h): 6.6

我设法将前4个字节4A23EA58解码为日期和时间"2017-04-09 12:04:26",但我似乎无法解码其余部分。我一直与该部门的供应商联系,但他们无法提供帮助。

感谢任何帮助 //斯蒂

1 个答案:

答案 0 :(得分:0)

当你想出时间&日期,这些是32位小端数字。

  

0x58EA234A =十进制1491739466

使用它作为自1-1-1970以来的秒数产生所需的日期。  对接下来的4个字节尝试相同的方法可得到以下结果:

  

0x067C0099 =十进制108789913

但这看起来不像浮点数。也许这是缩放的?

  

108789913/2 ^ 23 = 12.968768

......所需的经度。下一个:

  

0x1C343EE3 =十进制473186019
  
  473186019/2 ^ 23 = 56.408169

......所需的纬度。下一步

  

0x000003FC =十进制1020
  0x0000199C =十进制6556

6556可能是速度:

  

6556/10 ^ 3 = 6.556 ,轮到 6.6

不幸的是,即使我尝试其他高度单位,我也找不到很好的缩放比例从1020获得20米:

  

20.0m = 65.6168ft = 787.402in = 21.8723yds

这些值中的任何一个都没有一个很好的因子缩放到1020.缩放因子为51并不好,但也许这就是他们所做的:

  

1020/51 = 20.0

更新

我突然意识到海拔高度可能会达到+1000。地球上存在负升高,因此为了避免需要签名号码,他们可能在所有高度上添加了1000以保证正数。它可以存储在 unsigned 号码中。 您确实需要更多数据点。

一方面,如果他们只报告整数(整)米,我会感到惊讶,因为GPS设备报告小数点后的1位或2位数。

OTOH,GPS海拔高度并不准确,大多数徒步旅行者不需要知道海拔高度达到厘米。