Linux GPSD 比 GPS 鼠标的原始数据更准确
Linux GPSD is more accurate than the raw data from GPS mouse
我买了一个便宜的 USB GPS 鼠标,想用 Raspberry Pi 读取位置信息。来自 GPS 鼠标的原始(串行)数据如下所示:
$GPRMC,130312.00,A,4751.29758,N,01208.72343,E,0.067,,140721,,,A*7E
$GPVTG,,T,,M,0.067,N,0.125,K,A*24
$GPGGA,130312.00,4751.29758,N,01208.72343,E,1,08,1.46,450.1,M,45.7,M,,*5F
$GPGSA,A,3,08,21,27,32,22,01,10,03,,,,,2.79,1.46,2.37*07
$GPGSV,3,1,10,01,41,288,36,03,17,228,21,08,66,190,24,1
0,31,054,08*7B
$GPGSV,3,2,10,14,17,316,13,21,66,300,37,22,41,231,29,24,00,026,*74
$GPGSV,3,3,10,27,38,157,17,32,41,096,27*7D
$GPGLL,4751.29758,N,01208.72343,E,130312.00,A,A*67
它使用 NMEA 协议,记录在此处:https://www.ifm.com/download/files/nmea_protocol_cr3102/$file/nmea_protocol_cr3102.pdf
因此,例如在最后一行的 $GPLL 之后有以度、分和秒为单位的纬度和经度。所以从这个数据我们可以读到:
lat: 47°51'29.758''
lon: 12°08'7.2343''
这些值可以很容易地转换为十进制度,方法是将分除以 60 加到度上,然后将秒除以 60*60 加到该结果上。所以小数坐标为:
lat: 47.8582661111°
lon: 12.1353428611°
linux 有一个众所周知的软件包,称为 GPSD。有一些演示程序可以直观地显示数据。如果我 运行 CGPS -s
在终端 window 我得到以下数据:
lat: 47.85485133°
lon: 12.14536133°
问题是两者的结果相差很大,测试表明来自 CGPS -s
的数据更准确。但这怎么可能呢?我正在读取原始数据,结果比也只能读取原始数据的包差。这两个结果都不是很准确,但来自 CGPS -s
的数据更准确。
有人知道这是为什么吗?我该如何解决?谢谢!
您对 NMEA 数据的解释不正确。 NMEA 使用度数加十进制分,不是 degrees/minutes/seconds。
当你看到
$GPGGA,130312.00,4751.29758,N,01208.72343,E
实际上是北纬 47 度 51.29758 分和东经 12 度 8.72343 分。转换为十进制度数是 47.854959,12.145390,大致如 cgps
所说。
我买了一个便宜的 USB GPS 鼠标,想用 Raspberry Pi 读取位置信息。来自 GPS 鼠标的原始(串行)数据如下所示:
$GPRMC,130312.00,A,4751.29758,N,01208.72343,E,0.067,,140721,,,A*7E
$GPVTG,,T,,M,0.067,N,0.125,K,A*24
$GPGGA,130312.00,4751.29758,N,01208.72343,E,1,08,1.46,450.1,M,45.7,M,,*5F
$GPGSA,A,3,08,21,27,32,22,01,10,03,,,,,2.79,1.46,2.37*07
$GPGSV,3,1,10,01,41,288,36,03,17,228,21,08,66,190,24,1
0,31,054,08*7B
$GPGSV,3,2,10,14,17,316,13,21,66,300,37,22,41,231,29,24,00,026,*74
$GPGSV,3,3,10,27,38,157,17,32,41,096,27*7D
$GPGLL,4751.29758,N,01208.72343,E,130312.00,A,A*67
它使用 NMEA 协议,记录在此处:https://www.ifm.com/download/files/nmea_protocol_cr3102/$file/nmea_protocol_cr3102.pdf
因此,例如在最后一行的 $GPLL 之后有以度、分和秒为单位的纬度和经度。所以从这个数据我们可以读到:
lat: 47°51'29.758''
lon: 12°08'7.2343''
这些值可以很容易地转换为十进制度,方法是将分除以 60 加到度上,然后将秒除以 60*60 加到该结果上。所以小数坐标为:
lat: 47.8582661111°
lon: 12.1353428611°
linux 有一个众所周知的软件包,称为 GPSD。有一些演示程序可以直观地显示数据。如果我 运行 CGPS -s
在终端 window 我得到以下数据:
lat: 47.85485133°
lon: 12.14536133°
问题是两者的结果相差很大,测试表明来自 CGPS -s
的数据更准确。但这怎么可能呢?我正在读取原始数据,结果比也只能读取原始数据的包差。这两个结果都不是很准确,但来自 CGPS -s
的数据更准确。
有人知道这是为什么吗?我该如何解决?谢谢!
您对 NMEA 数据的解释不正确。 NMEA 使用度数加十进制分,不是 degrees/minutes/seconds。 当你看到
$GPGGA,130312.00,4751.29758,N,01208.72343,E
实际上是北纬 47 度 51.29758 分和东经 12 度 8.72343 分。转换为十进制度数是 47.854959,12.145390,大致如 cgps
所说。