GPS经度和经度来自十六进制值

时间:2013-12-16 13:53:13

标签: binary gps hex coordinates latitude-longitude

我从GPS到微控制器得到以下回复,而不是尝试解析字符串并将其转换为十六进制发送,我宁愿只使用提供的十六进制值然后发送到我的服务器,但我'我很难确定它存储的格式。

  • Lat:37 Deg 39 Min 48.84 Sec S(0xFF94DE3A)
  • Lon:144 Deg 58 Min 10.30 Sec E(0x019C5B97)

(另一个例子:)

  • Lat:49 Deg 10 Min 21.49 Sec N(0x008BDE6C)
  • Lon:123 Deg 4 Min 14.76 Sec W(0xFEA1EE9A)

我已尝试过其他类似标题的答案但无济于事。

第一个例子中的Lat看起来像-7020998 dec,因为它在南方,类似于第二个例子中的Lon(-22942054)在西方也是负面的。

我尝试将数字除以转换后的预期结果(使用度+分/ 60 +秒/ 3600)我想出一个粗略的数字, 即:

  • 0xFF94DE3A = -7020998 / -37.66357 = ~186413.502
  • 0x019C5B97 = 27024279 / 144.96953 = ~186413.510
  • 0x008BDE6C = 9166444 / 49.17264 = ~186413.501
  • 0xFEA1EE9A = -22942054 / -123.07077 = ~186413.508

这看起来接近180000,但如果我除以它看起来不正确(-7020998 / 180000 = -39.00554)。但是186413与什么相关?我觉得我错过了一些完全明显的东西......

编辑:我能够使用下面的快速示例(我知道它不漂亮)让它工作:

if ($GPSLatitude > 0x7FFFFFFF) // ensure correct signedness
  $GPSLatitude-=0x100000000;

$GPSf = floatval($GPSLatitude) / 186413.51334561207757602506827277;
$GPSD = floor($GPSf);
$GPSt = abs($GPSf - $GPSD) * 60;
$GPSM = floor($GPSt);
$GPSS = floor(($GPSt - $GPSM) * 6000) / 100;
echo 'GPS Latitude: ' . $GPSD . ' Deg ' . $GPSM . ' Min ' . number_format($GPSS,2,'.','') . ' Sec';

结果完全吻合,但我知道除了那个可怕的数字之外还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

根据http://en.wikipedia.org/wiki/Geotagging,即使在有理数中也可以设置GPS坐标:

  

存储在EXIF中时,坐标表示为一系列   GPS子IFD中的有理数。这是一个十六进制的转储   EXIF元数据的相关部分(使用big-endian字节顺序):

我担心,你没有全部十六进制数字,你只看到有理数的上半部分。而无形的除数可能就是那个神奇的数字。

我并不是坚持这样,我只是证明格式中可能隐藏着任何内容。 而且你在计算度数,而坐标可能只是高斯X,Y。

无论如何,GPS格式的名称是什么?