从 USB GPS 解码 GPS 坐标
decode GPS coordinate from USB GPS
我有 GPS/GLONASS U-BLOX 7。当我 运行 U-Center 应用程序时,它可以显示纬度和经度。但是,我需要从串行端口解码这个值(将它们添加到 python 代码中)。
我的问题是我找不到对接的工作原理。 U-Center 应用程序正在接收这些数据。当我搜索 NMEA 命令时,似乎缺少一些数据。但是我想知道U-Center是如何解码纬度和经度的。
有人有想法吗?
这是我的串口 GPS 数据的输出:
08:58:08 $GPRMC,085808.00,V,,,,,,,211217,,,N*76
08:58:08 $GPVTG,,,,,,,,,N*30
08:58:08 $GPGGA,085808.00,,,,,0,00,99.99,,,,,,*6B
08:58:08 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:08 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:08 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:08 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:08 $GPGLL,,,,,085808.00,V,N*47
08:58:09 $GPRMC,085809.00,V,,,,,,,211217,,,N*77
08:58:09 $GPVTG,,,,,,,,,N*30
08:58:09 $GPGGA,085809.00,,,,,0,00,99.99,,,,,,*6A
08:58:09 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:09 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:09 $GPGSV,3,2,10,14,21,046,,17,42,279,13,19,33,304,,22,67,073,*79
08:58:09 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:09 $GPGLL,,,,,085809.00,V,N*46
08:58:10 $GPRMC,085810.00,V,,,,,,,211217,,,N*7F
08:58:10 $GPVTG,,,,,,,,,N*30
08:58:10 $GPGGA,085810.00,,,,,0,00,99.99,,,,,,*62
08:58:10 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:10 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:10 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:10 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:10 $GPGLL,,,,,085810.00,V,N*4E
08:58:11 $GPRMC,085811.00,V,,,,,,,211217,,,N*7E
08:58:11 $GPVTG,,,,,,,,,N*30
08:58:11 $GPGGA,085811.00,,,,,0,00,99.99,,,,,,*63
08:58:11 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:11 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:11 $GPGSV,3,2,10,14,21,046,,17,42,279,17,19,33,304,,22,67,073,*7D
08:58:11 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:11 $GPGLL,,,,,085811.00,V,N*4F
08:58:12 $GPRMC,085812.00,V,,,,,,,211217,,,N*7D
08:58:12 $GPVTG,,,,,,,,,N*30
08:58:12 $GPGGA,085812.00,,,,,0,00,99.99,,,,,,*60
08:58:12 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:12 $GPGSV,3,1,10,03,83,344,,09,14,211,,11,35,165,,12,02,352,*7E
08:58:12 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:12 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:12 $GPGLL,,,,,085812.00,V,N*4C
08:58:13 $GPRMC,085813.00,V,,,,,,,211217,,,N*7C
好吧,经过更多测试后,我发现它有时会收到这样的 GPGLL:
$GPGLL,4908.59700,N,00912.84108,E,122829.00,A,A*6A
使用 NMEA 格式我可以提取我的纬度和经度,但是我仍然不知道 U-Center 是如何获得这个值的,但我假设它们显示的是最后接收到的位置。
尽管如此,如果有人有任何想法,如果您与我分享,将不胜感激。
谢谢
您的日志中有以下 NMEA 语句:
- RMC
- VTG
- GGA
- GSV
- GLL
(tag前的GP字母为talker ID,与此处无关)
VTG是一个包含speed和course的句子,这里不相关。 GSV 显示视野中的卫星数量,不能用于提取位置。
因此,当您要查找经纬度时,您可以在RMC、GGA 和GLL 之间进行选择。它们通常具有以下格式:
RMC:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
Where:
RMC Recommended Minimum sentence C
123519 Fix taken at 12:35:19 UTC
A Status A=active or V=Void.
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
022.4 Speed over the ground in knots
084.4 Track angle in degrees True
230394 Date - 23rd of March 1994
003.1,W Magnetic Variation
*6A The checksum data, always begins with *
如果我们将定义与您的其中一个句子相匹配:
$GPRMC,085808.00,V,,,,,,,211217,,,N*76
我们可以看到修复是在 08:58 UTC 进行的,但信号现在无效(无效)。这些字段是空的,因为您没有修复。如果您确实有修复,您会看到与定义中类似的数字。
GGA:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
Where:
GGA Global Positioning System Fix Data
123519 Fix taken at 12:35:19 UTC
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
1 Fix quality: 0 = invalid
1 = GPS fix (SPS)
2 = DGPS fix
3 = PPS fix
4 = Real Time Kinematic
5 = Float RTK
6 = estimated (dead reckoning) (2.3 feature)
7 = Manual input mode
8 = Simulation mode
08 Number of satellites being tracked
0.9 Horizontal dilution of position
545.4,M Altitude, Meters, above mean sea level
46.9,M Height of geoid (mean sea level) above WGS84
ellipsoid
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47 the checksum data, always begins with *
如果我们将定义与您的其中一个句子相匹配:
$GPGGA,085808.00,,,,,0,00,99.99,,,,,,*6B
我们可以看到修复质量为 0,您没有修复。 GPS 单元在经度和纬度字段中发送空白值。
GLL:
$GPGLL,4916.45,N,12311.12,W,225444,A,*1D
Where:
GLL Geographic position, Latitude and Longitude
4916.46,N Latitude 49 deg. 16.45 min. North
12311.12,W Longitude 123 deg. 11.12 min. West
225444 Fix taken at 22:54:44 UTC
A Data Active or V (void)
*iD checksum data
如果我们将定义与您的其中一个句子相匹配:
$GPGLL,,,,,085808.00,V,N*47
这句话也是void,表示不发送经纬度
因此,当您开始接收正确的数据时,日志看起来会更像我列出的定义。数据活动标志将从 V 切换到 A,字段将有值而不是空的。您可能必须外出并获得良好的信号才能发生这种情况。要提取数据,您必须在 RMC、GGA 或 GLL 语句之间进行选择:它们都包含您要查找的内容。
要实际解析 Python 中的数据,您可以使用 pynmea2, micropyGPS 之类的库或类似的库。或者你可以自己写逻辑。
自己写逻辑应该很简单。只需将电报以 ,
作为拆分字符即可。最后一个字段也必须用 *
分隔以分隔字段和校验和。
我有 GPS/GLONASS U-BLOX 7。当我 运行 U-Center 应用程序时,它可以显示纬度和经度。但是,我需要从串行端口解码这个值(将它们添加到 python 代码中)。 我的问题是我找不到对接的工作原理。 U-Center 应用程序正在接收这些数据。当我搜索 NMEA 命令时,似乎缺少一些数据。但是我想知道U-Center是如何解码纬度和经度的。
有人有想法吗?
这是我的串口 GPS 数据的输出:
08:58:08 $GPRMC,085808.00,V,,,,,,,211217,,,N*76
08:58:08 $GPVTG,,,,,,,,,N*30
08:58:08 $GPGGA,085808.00,,,,,0,00,99.99,,,,,,*6B
08:58:08 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:08 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:08 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:08 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:08 $GPGLL,,,,,085808.00,V,N*47
08:58:09 $GPRMC,085809.00,V,,,,,,,211217,,,N*77
08:58:09 $GPVTG,,,,,,,,,N*30
08:58:09 $GPGGA,085809.00,,,,,0,00,99.99,,,,,,*6A
08:58:09 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:09 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:09 $GPGSV,3,2,10,14,21,046,,17,42,279,13,19,33,304,,22,67,073,*79
08:58:09 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:09 $GPGLL,,,,,085809.00,V,N*46
08:58:10 $GPRMC,085810.00,V,,,,,,,211217,,,N*7F
08:58:10 $GPVTG,,,,,,,,,N*30
08:58:10 $GPGGA,085810.00,,,,,0,00,99.99,,,,,,*62
08:58:10 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:10 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:10 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:10 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:10 $GPGLL,,,,,085810.00,V,N*4E
08:58:11 $GPRMC,085811.00,V,,,,,,,211217,,,N*7E
08:58:11 $GPVTG,,,,,,,,,N*30
08:58:11 $GPGGA,085811.00,,,,,0,00,99.99,,,,,,*63
08:58:11 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:11 $GPGSV,3,1,10,03,83,342,,09,14,211,,11,35,165,,12,02,352,*78
08:58:11 $GPGSV,3,2,10,14,21,046,,17,42,279,17,19,33,304,,22,67,073,*7D
08:58:11 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:11 $GPGLL,,,,,085811.00,V,N*4F
08:58:12 $GPRMC,085812.00,V,,,,,,,211217,,,N*7D
08:58:12 $GPVTG,,,,,,,,,N*30
08:58:12 $GPGGA,085812.00,,,,,0,00,99.99,,,,,,*60
08:58:12 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
08:58:12 $GPGSV,3,1,10,03,83,344,,09,14,211,,11,35,165,,12,02,352,*7E
08:58:12 $GPGSV,3,2,10,14,21,046,,17,42,279,,19,33,304,,22,67,073,*7B
08:58:12 $GPGSV,3,3,10,23,46,197,,32,01,042,*72
08:58:12 $GPGLL,,,,,085812.00,V,N*4C
08:58:13 $GPRMC,085813.00,V,,,,,,,211217,,,N*7C
好吧,经过更多测试后,我发现它有时会收到这样的 GPGLL: $GPGLL,4908.59700,N,00912.84108,E,122829.00,A,A*6A 使用 NMEA 格式我可以提取我的纬度和经度,但是我仍然不知道 U-Center 是如何获得这个值的,但我假设它们显示的是最后接收到的位置。 尽管如此,如果有人有任何想法,如果您与我分享,将不胜感激。 谢谢
您的日志中有以下 NMEA 语句:
- RMC
- VTG
- GGA
- GSV
- GLL
(tag前的GP字母为talker ID,与此处无关)
VTG是一个包含speed和course的句子,这里不相关。 GSV 显示视野中的卫星数量,不能用于提取位置。
因此,当您要查找经纬度时,您可以在RMC、GGA 和GLL 之间进行选择。它们通常具有以下格式:
RMC:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
Where:
RMC Recommended Minimum sentence C
123519 Fix taken at 12:35:19 UTC
A Status A=active or V=Void.
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
022.4 Speed over the ground in knots
084.4 Track angle in degrees True
230394 Date - 23rd of March 1994
003.1,W Magnetic Variation
*6A The checksum data, always begins with *
如果我们将定义与您的其中一个句子相匹配:
$GPRMC,085808.00,V,,,,,,,211217,,,N*76
我们可以看到修复是在 08:58 UTC 进行的,但信号现在无效(无效)。这些字段是空的,因为您没有修复。如果您确实有修复,您会看到与定义中类似的数字。
GGA:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
Where:
GGA Global Positioning System Fix Data
123519 Fix taken at 12:35:19 UTC
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
1 Fix quality: 0 = invalid
1 = GPS fix (SPS)
2 = DGPS fix
3 = PPS fix
4 = Real Time Kinematic
5 = Float RTK
6 = estimated (dead reckoning) (2.3 feature)
7 = Manual input mode
8 = Simulation mode
08 Number of satellites being tracked
0.9 Horizontal dilution of position
545.4,M Altitude, Meters, above mean sea level
46.9,M Height of geoid (mean sea level) above WGS84
ellipsoid
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47 the checksum data, always begins with *
如果我们将定义与您的其中一个句子相匹配:
$GPGGA,085808.00,,,,,0,00,99.99,,,,,,*6B
我们可以看到修复质量为 0,您没有修复。 GPS 单元在经度和纬度字段中发送空白值。
GLL:
$GPGLL,4916.45,N,12311.12,W,225444,A,*1D
Where:
GLL Geographic position, Latitude and Longitude
4916.46,N Latitude 49 deg. 16.45 min. North
12311.12,W Longitude 123 deg. 11.12 min. West
225444 Fix taken at 22:54:44 UTC
A Data Active or V (void)
*iD checksum data
如果我们将定义与您的其中一个句子相匹配:
$GPGLL,,,,,085808.00,V,N*47
这句话也是void,表示不发送经纬度
因此,当您开始接收正确的数据时,日志看起来会更像我列出的定义。数据活动标志将从 V 切换到 A,字段将有值而不是空的。您可能必须外出并获得良好的信号才能发生这种情况。要提取数据,您必须在 RMC、GGA 或 GLL 语句之间进行选择:它们都包含您要查找的内容。
要实际解析 Python 中的数据,您可以使用 pynmea2, micropyGPS 之类的库或类似的库。或者你可以自己写逻辑。
自己写逻辑应该很简单。只需将电报以 ,
作为拆分字符即可。最后一个字段也必须用 *
分隔以分隔字段和校验和。