和设备上合作做了一个gps 模块, 获取数据, 模块协议是 nmea-0183 , 协议内容网上搜了一下
1. 下面数据选择 是使用GPRMC, 还是GPGGA
信息类型为: GPGSV:可见卫星信息 GPGLL:地理定位信息 GPRMC:推荐最小定位信息 // 使用这个数据 GPVTG:地面速度信息 GPGGA:GPS定位信息 // 还是用这个数据 GPGSA:当前卫星信息
其中
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
2. 经纬度返回数据格式如上图, 例如设备商返回我的数据 11956.7389,3150.1705, 这个值是直接->119.567389,31.501705 就是wgs84 标准么, 还是需要 做其他处理.
我使用百度转换接口 测试, 地址偏移量有点大, 完全就不对
有做gps 模块的 数据便宜 纠正的 给点 意见啊######不能沉了啊, 有谁做过 gps模块数据解析的, 给个 方向啊###### 这是几年前用的办法,不保证能100%用。
#!/usr/bin/env python #coding=utf-8 import math pi = 3.14159265358979324 a = 6378245.0 ee = 0.00669342162296594323 #纠偏函数 def transform(wgLat,wgLon): latlng = [0]*2 if outOfChina(wgLat, wgLon): latlng[0] = wgLat; latlng[1] = wgLon; dLat = transformLat(wgLon - 105.0, wgLat - 35.0) dLon = transformLon(wgLon - 105.0, wgLat - 35.0) radLat = wgLat / 180.0 * pi magic = math.sin(radLat) magic = 1 - ee * magic * magic sqrtMagic = math.sqrt(magic) dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi) dLon = (dLon * 180.0) / (a / sqrtMagic * math.cos(radLat) * pi) latlng[0] = wgLat + dLat latlng[1] = wgLon + dLon return latlng def outOfChina(lat,lon): if (lon < 72.004 or lon > 137.8347): return True if (lat < 0.8293 or lat > 55.8271): return True return False def transformLat(x,y): ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * math.sqrt(abs(x)) ret += (20.0 * math.sin(6.0 * x * pi) + 20.0 * math.sin(2.0 * x * pi)) * 2.0 / 3.0 ret += (20.0 * math.sin(y * pi) + 40.0 * math.sin(y / 3.0 * pi)) * 2.0 / 3.0 ret += (160.0 * math.sin(y / 12.0 * pi) + 320 * math.sin(y * pi / 30.0)) * 2.0 / 3.0 return ret def transformLon(x,y): ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * math.sqrt(abs(x)) ret += (20.0 * math.sin(6.0 * x * pi) + 20.0 * math.sin(2.0 * x * pi)) * 2.0 / 3.0 ret += (20.0 * math.sin(x * pi) + 40.0 * math.sin(x / 3.0 * pi)) * 2.0 / 3.0 ret += (150.0 * math.sin(x / 12.0 * pi) + 300.0 * math.sin(x / 30.0 * pi)) * 2.0 / 3.0 return ret
######我用这个算过一下, (GCJ-02) 与百度坐标系 (BD-09) 这两个转一下还行, WGS84 的就不对了, 不知道是不是 gps模块返回的数据 不是WGS84, 或者要处理啊, 按理来说不应该啊######已经解决, 纬度 ddmm.mmmm( 度分 ) 格式 ( 前面的 0 也将被传输 ), 主要是这个格式没明白, dd是度数, mm是分, 0.mmmm是秒(格式是分, 要转成秒), 然后转成小数10进制, 然后用上面的 转换方式 就对了 ######???没明白
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。