美文网首页
腾讯地图经纬度转百度地图经纬度(PHP)

腾讯地图经纬度转百度地图经纬度(PHP)

作者: 春泥村雨 | 来源:发表于2016-07-28 17:01 被阅读603次

    最近想帮公司线下的门店采集一下经纬度,标注在地图上,一研究居然地图还有这么多标准,现总结相关知识如下,首先了解一下当前互联网地图的坐标系现状

    一、坐标系介绍

    1. 地球坐标 (WGS84)

    • 国际标准,从专业GPS 设备中取出的数据的坐标系
    • 国际地图提供商使用的坐标系

    2. 火星坐标 (GCJ-02)也叫国测局坐标系

    • 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
    • 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
    • 腾讯地图用的也是GCJ02坐标

    3. 百度坐标 (BD-09)

    • 百度标准,百度 SDK,百度地图,Geocoding 使用
    • (本来就乱了,百度又在火星坐标上来个二次加密)
    二、PHP 代码
    <?php
        $lng=floatval(112.618056);//用变量替换时注意数据类型
        $lat=floatval(37.858867);
        $locXY=Convert_GCJ02_To_BD09($lng,$lat);
        $content="百度地图坐标系,经度:".$locXY['lng'].";纬度:".$locXY['lat'];
        echo $content;
        /**
        * 中国正常GCJ02坐标-->百度地图BD09坐标
        * 腾讯地图用的也是GCJ02坐标
        * @param double $lng 经度
        * @param double $lat 纬度
        */
        function Convert_GCJ02_To_BD09($lng,$lat)
        {
            $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
            $x = $lng;
            $y = $lat;
            $z =sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi);
            $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi);
            $lng = $z * cos($theta) + 0.0065;
            $lat = $z * sin($theta) + 0.006;
            return array('lng'=>$lng,'lat'=>$lat);
        }
    ?>
    

    大家可以通过此工具来验证准确性:百度地图拾取坐标系统

    百度地图坐标拾取系统 截图
    参考资料:

    http://cnodejs.org/topic/564c0a27e4766d487f6fe38d
    http://www.open-open.com/code/view/1440854840138

    相关文章

      网友评论

          本文标题:腾讯地图经纬度转百度地图经纬度(PHP)

          本文链接:https://www.haomeiwen.com/subject/lxvajttx.html