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

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

一、坐标系介绍

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容