如何计算GPS数据?

时间:2016-11-27 00:00:32

标签: c++ c++11 gps

我需要使用以下信息计算GPS数据。

Bits       size description 
Bits 0-25   26  Latitude    Location latitude   Latitude as 26-bit integer * 100,000
Bits 26-51  26  Longitude   Location longitude  Longitude as 26-bit integer * 100,000

根据以上信息,我明白了 1)纬度值可以是+ -90.xxxxxx,即它需要7位以容纳90(2 ^ 7)的值。根据信息我如何计算纬度并转换为尾数(7位)和指数(19位)部分。另外,标志位怎么样?例如,值87.45需要以87存储到7位的方式存储,其中19位存储值45.

2)类似的经度值可能是+ -180,需要8位来容纳180(2 ^ 8)的值,基于信息如何计算经度并转换为尾数(8位)和指数(18位)部分。另外,这个符号位怎么样?

例如,值130.50需要以130存储到8位的方式存储,其中18位存储值50.

1 个答案:

答案 0 :(得分:1)

我认为你正在看这个错误...你被赋予52位值,包含lat和lon作为整数值,对吧?别担心尾数。您需要将输入的两个部分视为单独的整数,并将每个部分除以100,000以获得度数。

尝试类似:

#include <stdint.h>
int main() {
  int64_t input = yourGpsVal();
  // note: lat/lon may be the wrong way round
  // strip off the rightmost 26 bits and convert to double
  double lat = ( input >> 26 ) / 100000.;
  // zero the bits left of the rightmost 26 and convert to double
  double lon = ( input % ( 1 << 26 )) / 100000.;
}

在Wandbox上查看此演示。 http://melpon.org/wandbox/permlink/xtiDOfMKH0wK5LIC