百度经纬度转为谷歌经纬度

目前有四种经纬度分类

百度经纬度 BD-09

标准经纬度 GPS

谷歌经纬度 GCJ-02(谷歌、高德、腾讯)

搜狗经纬度

(1)其他经纬度转为百度,见百度API:http://developer.baidu.com/map/changeposition.htm

使用接口:http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x='.$val['glat'].'&y='.$val['glng']

(2)其他转搜狗,见搜狗的API:http://map.sogou.com/api/documentation/javascript/api2.5/interface_translate.html#late_intro

(3)百度转为谷歌,见下面的方法:

使用的腾讯地图的API:http://open.map.qq.com/webservice_v1/guide-convert.html

使用的接口地址:http://apis.map.qq.com/ws/coord/v1/translate?locations=39.146599,117.148003&type=3&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77



<?php


/**
 * @abstract 从POI的百度经纬度生成POI的谷歌经纬度 BD-09转化为GCJ-02(谷歌、高德、腾讯)
 * @author zhangyi
 * @date 2014/08/01
 */
$rootPath = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..';
require_once $rootPath . DIRECTORY_SEPARATOR . 'scriptindex.php';
set_time_limit(0); //脚本执行时长
error_reporting(E_ALL);
// $a = '3.14159265358979324';
// $b = doubleval($a);
//$x_pi = 3.14159265358979324 * 3000.0 / 180.0;
//var_dump($a,$x_pi,$b);die();
/// <summary>
/// 中国正常坐标系GCJ02协议的坐标,转到 百度地图对应的 BD09 协议坐标
/// </summary>
/// <param name="lat">维度</param>
/// <param name="lng">经度</param>
/// <summary>
/// 百度地图对应的 BD09 协议坐标,转到 中国正常坐标系GCJ02协议的坐标
/// </summary>
/// <param name="lat">维度</param>
/// <param name="lng">经度</param>



class blng2glng {
      //这个是算法
//    public function getdata($lat,$lng) {
//        $x_pi =  3.14159265358979324 * 3000.0 / 180.0;
//        //var_dump($x_pi);die();
//        $ax = $lat - 0.0065;
//        $bx = $lng - 0.006;
//        $d = sqrt($ax*$ax + $bx*$bx)- 0.00002 * sin($bx * $x_pi);
//        $f = atan2($bx, $ax) - 0.000003 * cos($ax*$x_pi);
//        //lng
//        $return[0] = $d*cos($f);
//        //lat
//        $return[1] = $d*sin($f);
//        return $return;
//    }
    
    
    /*
     * BD-09转化为GCJ-02 调用腾讯地图的转化接口,GCJ-02(谷歌、高德、腾讯)
     * http://open.map.qq.com/webservice_v1/guide-convert.html
     */
    public function convertCoord($blng,$blat) {
        
        $url = "http://apis.map.qq.com/ws/coord/v1/translate?locations=".$blat.",".$blng."&type=3&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77";
        //var_dump($blng,$blat,$url);
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
        $req = curl_exec($ch);
        $arr = json_decode ($req,TRUE);
        //var_dump($arr);die();
        if(isset($arr['status']) && $arr['status'] == 0 && isset($arr['locations'][0])){
            return $arr['locations'][0];
        }
        return array();
    }
    
    public function run() {
        //先更新景点表的
        echo "START: " . date('Y-m-d H:i:s', time()) . "\r\n";
        //景点表
        for(;;){
            $sqlV = "SELECT id,blng,blat"
                    . " FROM poi_info "
                    . " WHERE del_flag=0 AND glat=0 AND glat=0 AND blat!=0 AND blng!=0"
                    . " LIMIT 1000";
            $resultV = Yii::app()->db->createCommand($sqlV)->queryAll();
            if(!empty($resultV)){
                foreach ($resultV as $Vkey => $Vvalue) {
                    if ($Vkey%5==0) {
                        sleep(1);
                    }
                    //实际还是走接口
                    $return = $this->convertCoord($Vvalue['blng'], $Vvalue['blat']);
                    if(!empty($return)){
                        $sql = 'UPDATE poi_info SET glat = '.$return['lat'].', glng = '.$return['lng'].', update_time=NOW() WHERE id = '.$Vvalue['id'];
                        file_put_contents("poi_glat_update.txt",$sql.";\n",FILE_APPEND);
                        Yii::app()->db->createCommand($sql)->execute();
                    }
                }
            }else{
                break;
            }
        }
        //区域表
        for (;;) {
            $sqlV = "SELECT id,blng,blat"
                    . " FROM district_info "
                    . " WHERE del_flag=0 AND glat=0 AND glat=0 AND blat!=0 AND blng!=0"
                    . " LIMIT 1000";
            $resultV = Yii::app()->db->createCommand($sqlV)->queryAll();
            if (!empty($resultV)) {
                foreach ($resultV as $Vkey => $Vvalue) {
                    if ($Vkey % 5 == 0) {
                        sleep(1);
                    }
                    //实际还是走接口
                    $return = $this->convertCoord($Vvalue['blng'], $Vvalue['blat']);
                    if (!empty($return)) {
                        $sql = 'UPDATE district_info SET glat = ' . $return['lat'] . ', glng = ' . $return['lng'] . ', update_time=NOW() WHERE id = ' . $Vvalue['id'];
                        file_put_contents("district_glat_update.txt", $sql . ";\n", FILE_APPEND);
                        Yii::app()->db->createCommand($sql)->execute();
                    }
                }
            } else {
                break;
            }
        }
        
        echo "END TIME: " . date('Y-m-d H:i:s', time()) . "\r\n";
    }

}

$model = new blng2glng();
$model->run();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值