从小工具中读取GPS数据

KAG*_*GAP 0 c++ gps

我有一个GPS小工具,我想知道如何从中接收C++(坐标)信息?

Jer*_*fin 5

可能比评论所指出的更容易回答.虽然大多数GPS单元确实支持专有(通常)二进制协议,但几乎所有甚至接近当前的协议也支持NMEA格式的数据,并且默认情况下将提供它.无论是通过串口,蓝牙还是USB连接,大多数用户都可以看到串口等用户程序.

IOW,您可以通过打开串口并从中读取数据来支持90%的合理当前GPS装置.唯一令人遗憾的部分是数据格式的NMEA标准相当昂贵(虽然它没有以前那么糟糕 - 你现在可以只购买你关心的部分,也就是说只有附录B, IIRC).

幸运的是,除非您计划让您的软件获得船用或飞机导航认证,否则您可能不需要 - 有相当数量的网站可以覆盖您可能关心的(少数)消息类型.就此而言,如果您只是在正确的COM端口上打开一个终端程序并查看数据,那么自己找到纬度/经度并不是很难(至少如果你至少有一个模糊的概念,你在哪里是).

基本上是 CSV格式 - 每行一条记录,字段用逗号分隔.它全部采用普通的ASCII/ANSI文本,因此获取坐标主要是检查第一个字段是否为正确的记录("$ GPGGA"),然后获取字段3,4,5和3(3和4)是纬度,5和6经度 - 3和5给出数字,4和6有"N",或"S"和"E"或"W"表示北/南纬度和东/西经度.您可能还想检查其后的字段是否包含"1"或"2",分别表示正常或差分GPS定位("0"表示没有GPS定位,因此无效数据).

并不重要,但你应该也意识到你可能会收到其他几种字段类型,其中一些也包含修复数据.$ GPGGA恰好是我曾经使用的那个 - 还有其他一些可能同样好,但我从来没有太多理由去看别人,因为那个已经足够我需要/做了什么.

编辑:这是一个样本数据转储,与从GPS接收的数据完全相同,在本例中是通过蓝牙虚拟串行端口:

$ GPGGA,090809.103,3901.4345,N,10448.2482,W,0,00,50.0,2078.2,M,-21.4,M,0.0,0000*43 $ GPRMC,090809.103,V,3901.4345,N,10448.2482,W,0.00, 0.00,220311 ,,*07 $ GPVTG,0.00,T ,, M,0.00,N,0.0,K*60 $ GPGGA,090810.103,3901.4345,N,10448.2482,W,0,00,50.0,2078.2,M, - 21.4,M 0.0,0000*4B

在第二张$ GPGGA记录中:

$ GPGGA,090810.103,3901.4345,N,10448.2482,W,0,00,50.0,2078.2,男,-21.4,M 0.0,0000*4B

"$ GPGGA"是记录("Sentence")类型标识符.
"090810.103"是当前的UTC时间.
"3901.4345,N"是纬度.
"10448.2482,W"是经度.
接下来的"0"是告诉你,前面的经/纬度是不是有效.

纬度和经度都是格式化的(IIRC),小数点之前的最后两位是分钟,小数点之后是分钟的分数,所以`3901.4345'实际上意味着北纬39°1.4345'.