C3-370C 串口输出经纬度 -> 度分秒 的转换方法
看到同学们说从 GPS 读出的经纬度和上位机软件输出的有较大差异,不知如何转换, 已经在帖子中说明了, 不过立即淹没在 900+ 楼里...其实只要明白各个数据位代表的含义, 转换不难.
GPS 串口读出的是 DDMM.MMMM格式
一般上位机是 DD.DDDDDD°或 DD°MM'SS" 格式, 这两种都可以在 GE 里直接输入
举例说明: 3147.8749 (示例,经纬度一样) 格式为 DDMM.MMMM
转换成度:
1. 度的部分直接就是31,
2.剩下的 MM.MMMM/60=度, 所以 47.8749/60=0.797915
则 转换成度是 31.797915°
转换成度分秒:
1. 同样,度的部分直接就是31,
2. 分直接是整数部分 47
3. 秒则是 后面的 0.MMMM*60. 例子中为: 0.8749*60=52.494
4. 则度分秒即是 31°47'52.494"
精确到 0.001" 如果在单片机中, 使用字符串操作, 只取分的部分(如0.8749)转换成数字再利用上面的方法计算, 那么只需要 Float 精度就可以了实现了吧 回复【楼主位】wowbanui
看到同学们说从 gps 读出的经纬度和上位机软件输出的有较大差异,不知如何转换, 已经在帖子中说明了, 不过立即淹没在 900+ 楼里...
其实只要明白各个数据位代表的含义, 转换不难.
gps 串口读出的是 ddmm.mmmm格式
一般上位机是 dd.dddddd°或 dd°mm'ss" 格式, 这两种都可以在 ge 里直接输入
举例说明: 3147.8749 (示例,经纬度一样) 格式为 ddmm.mmmm
转换成度:
1. 度的部分直接就是31,
2.剩下的 mm.mmmm/60=度, 所以 47.8749/60=0.797915
则 转换成度是 31.797915°
转换成度分秒:
1. 同样,度的部分直接就是31,
2. 分直接是整数部分 47
3. 秒则是 后面的 0.mmmm*60. 例子中为: 0.8749*60=52.494
4. 则......
-----------------------------------------------------------------------
不知道你有没有发现,即便如此
转换后的结果和PC上软件计算的结果仍有差别~~~ 回复【2楼】format
-----------------------------------------------------------------------
差别大么?
我认为理论上的算法是正确的, 我考虑一下可能有如下原因:
1. 上位机软件 会不会在秒上面四舍五入? 如上面的31°47'52.494" 就为 31°47'52"
2. 因为模块每秒输出一次数据, 是否是观察到的串口数据和软件输出的不是同一次? 差别不大的,已验证~转换算法就是这样转换就行了! GPS输出的坐标有2种,一个是实时的$GPGGA,还有一个是推荐的$GPRMC,有时会不一样。 回复【5楼】silence sky 静空
-----------------------------------------------------------------------
是的, 这款默认同时输出 GGA 和 RMC 语句
但是查datasheet的NMEA协议格式都是 DDMM.MMMM.
不一样是否有特殊情况? 终于找到计算方法了。~感谢楼主 标记学习 学习了 mark 不错,标记 难得找的到~ mark LZ说得很清晰了,学习。 mark! mark 如果支援sirf格式的,用它格式比較方便。
現在都不太用NMEA,還要搞字串轉數值,太麻煩了。 mark mark 标记学习 mark 学习 mark 不错,学习下 mark 多谢楼主了,标记一下 mark 楼主可有C3-370C的详细的中文资料 很好,很详细。 mark 感觉用GOOGLE地图定这个经纬度还是有点偏差 学习计算方法 mark!!!!!!!!
页:
[1]