百度地图坐标转换

首先, 咱们了解一下为何要坐标转换php

国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了我的隐私。百度对外接口的坐标系并非GPS采集的真实经纬度,须要经过坐标转换接口进行转换。

其次, 咱们在网上搜到有经过http://api.map.baidu.com/ag/coord/convert?from=[0/2]&to=4&x=纬度&y=经度这个URL来进行转换的, 其中0表明WGS-84即标准GPS设备返回的坐标, 2表明国测局的标准, 显然4就是百度地图认的坐标了. 但我遍搜网络, 这个接口是没有文档的(可是确实可用). 由于会碰到跨域的问题(CORS), 因此就用了jQuery中script标签跨域的方式来执行, 结果这个脚本也被百度”回收”了, 固然, 网上仍是有痕迹的, 我把它保存了一下, gist. 我没在这上面花太多时间, 并无测它支不支持批量转换(看网友写了一个transMore, 是必须批量送入, 但底层仍是一次次分别请求, 不合我意).git

而事实上, 百度已经提供了文档化的坐标转换接口, 而且原生就支持批量请求. 显然, 咱们应该用文档化的方法, 只是这种用法须要申请成为一个开发者, 添加一个应用. 这不是小事么, 因而我小包装了一下, 见此gist.github

仅仅有一点小要求, 就是传入的坐标, 键名分别是lon(经度)和lat和(纬度), 而且能够传入一个(传入一个, 返回也是一个), 或者一组web

转换一个坐标:api

BMap.Convertor.translate({lon:lon, lat:lat}, 1, 5, bdkey, function (point, status, message) {
    if(status) return show(message || "转换坐标出错:"+status, true);
    var curmarker = new BMap.Marker(point);
    baidumap.addOverlay(curmarker);
});

一组坐标:跨域

BMap.Convertor.translate([{lon:lon, lat:lat},...], 1, 5, bdkey, function (points, status, message) {
    if(status) return show(message || "转换坐标出错:"+status, true);
    // 遍历points
});
相关文章
相关标签/搜索