从小工具中读取GPS数据

时间:2011-03-22 07:34:39

标签: c++ gps

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

1 个答案:

答案 0 :(得分:5)

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

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

幸运的是,除非您计划让您的软件获得船用或飞机导航认证,否则您可能不需要 - 有相当数量的web sites覆盖(少数)消息类型可能在意。就此而言,如果您只是在正确的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恰好是我曾经使用的那个 - 还有其他的可能同样好,但我从来没有太多理由去看别人,因为那个已经足够我所需要/做的了。 / p>

编辑:以下是从GPS收到的数据完全的示例转储,在本例中是通过蓝牙虚拟串口:

$ GPGGA,090809.103,3901.4345,N,10448.2482,W,0,00,50.0,2078.2,男,-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,男,-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。