zoukankan      html  css  js  c++  java
  • 百度地图坐标转换

    首先, 我们了解一下为什么要坐标转换

    国际经纬度坐标标准为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, 是必须批量送入, 但底层还是一次次分别请求, 不合我意).

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

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

    转换一个坐标:

    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
    });
  • 相关阅读:
    Apache httpd和JBoss构建高可用集群环境
    Ubuntu 14.04下NFS安装配置
    Ubuntu 14.04 安装 JDK 7.0
    Docker第三方项目小结
    Shipyard远程API
    Linux软件管理——yum命令详解
    Quartz集群原理及配置应用
    Rsync原理介绍及配置应用
    python构造wireshark可以解析的LTE空口数据
    A Simple Web Server
  • 原文地址:https://www.cnblogs.com/walkerwang/p/5313708.html
Copyright © 2011-2022 走看看