GPS的GPRMC转GBS84,GCJ02,BD09 且将数据标定在百度地图上面

(注意,转成BD09需要百度秘钥,百度地图申请秘钥教程:http://lbsyun.baidu.com/index.php?title=jspopular/guide/getkey)

一. 采集信号与实际道路对比(左侧实际道路,右侧gps采集数据道路)

GPS的GPRMC转GBS84,GCJ02,BD09 且将数据标定在百度地图上面_第1张图片                     GPS的GPRMC转GBS84,GCJ02,BD09 且将数据标定在百度地图上面_第2张图片

二. 采集信号GPRMC转成WGS84,再将WGS84转成BD09(百度地图标准)

1. 首先将GPRMC转成WGS84标准

def GPRMC_to_GBS84(gps):
    ''' 将GPRMC的度分转成度'''
    d = int(gps / 100)
    m = (gps - d * 100) / 60.0
    return d + m

2. 将WGS84转成BD09

class Geoconv(object):
    my_ak = '输入你自己的ak秘钥'
    my_sk = 'fFyAglwnmgxnYI6c---------------------------'

    def __init__(self):
        pass

    # GPS坐标转换为百度坐标
    #解释:http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
    #API:http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥 //GET
    def wgs84tobd09(self,lon,lat):
        queryStr = '/geoconv/v1/?coords={},{}&from=1&to=5&ak={}'.format(lon, lat, self.my_ak)
        # print queryStr
        # 对queryStr进行转码,safe内的保留字符不转换
        encodedStr = request.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")

        # 在最后直接追加上yoursk
        rawStr = encodedStr + self.my_sk

        # md5计算出的sn值
        my_sn = hashlib.md5(quote_plus(rawStr).encode("utf-8")).hexdigest()
        # print my_sn
        url = 'http://api.map.baidu.com' + queryStr + "&sn=" + my_sn
        # print url

        res = requests.get(url)
        # print '*' * 10
        # get收到的内容
        json_str = res.content
        # print json_str
        dictData = json.loads(json_str)
        # print dictData["result"][0]["x"]
        # print dictData["result"][0]["y"]
        return dictData["result"][0]["x"], dictData["result"][0]["y"]


def GPRMC_str_to_BD09(gprmc_str, myconv):
    ''' 将gprmc的字符串转成BD09的信息'''
    lng_bd09, lat_bd09, _ = 0, 0, 1
    strs = gprmc_str.split(',')
    if len(strs) == 13 and strs[0] == '$GPRMC' and strs[2] == 'A':
        lng, lat = strs[5], strs[3]
        lng = GPRMC_to_GBS84(float(lng))
        lat = GPRMC_to_GBS84(float(lat))
        lng_bd09, lat_bd09 = myconv.wgs84tobd09(lng, lat)
    return lng_bd09, lat_bd09, _

三. 将BD09显示在百度地图上

1. 将前面生成的gps数据,按照百度api的格式保存成.js

    json_str = 'var data = {"data":%s, "total":%d,"rt_loc_cnt":47764510,"errorno":0,"NearestTime":"2014-08-29 15:20:00","userTime":"2014-08-29 15:32:11"}' % (str(results), len(results))
    with open(os.path.join(folder_path, 'points-sample-data.js'), 'w') as fw:
        fw.write(json_str)

2. 使用百度的html,申请自己的ak账号,更改js的本地存储位置,然后双击html,在浏览器中查看




  加载海量点
  
  
  
  
  


    

 

文末附上几个辅助的网址:
1. 从地图上拾取某点的经纬度(BD09格式):http://api.map.baidu.com/lbsapi/getpoint/

2. 将BD09、WGS84、GCJ02经纬度互转:https://tool.lu/coordinate/

3. 百度api各种使用教程例程:http://lbsyun.baidu.com/jsdemo.htm#c1_19

4. 百度api使用手册:http://lbsyun.baidu.com/index.php?title=jspopular/guide/custom

 

最后,我把全部的文件传到csdn上了,想要的可以下载。没积分的老哥直接私聊我:[email protected]
 

你可能感兴趣的:(python,地图,python,GPS可视化,WGS84转BD09,GPS转WGS84)