美文网首页
通过地点获取周边地铁和公交信息

通过地点获取周边地铁和公交信息

作者: meng_philip123 | 来源:发表于2017-12-07 19:47 被阅读107次

    最近在做一个简历相关的项目 里面有一个有意思的功能 效果图如下:

    经过对百度地图的研究以及我目前有的数据(只有一个工作地点)  需要经过3个接口去处理 

    第一个接口(地址转坐标接口):

    地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

    第二个接口(坐标查周围基础设施(地铁 公交)):

    地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

    第三个接口(根据起始地址坐标和目的地坐标计算步行路程或者时间):

    地址:http://lbsyun.baidu.com/index.php?title=webapi/route-matrix-api-v2

    php简单代码实现如下:

    1.配置文件

    <?php

    return array (

           'ak'=> 'rhnKciva0DXwlexdgsrhgse4e6cdkGUy',

          //地址转坐标接口

          'geocoder_url' => 'http://api.map.baidu.com/geocoder/v2/',

          //坐标查周围基础设施(地铁 公交)

          'placesearch_url' => 'http://api.map.baidu.com/place/v2/search',

         //根据起始地址坐标和目的地坐标计算步行路程或者时间

         'routematrix_url' => 'http://api.map.baidu.com/routematrix/v2/walking',

         //路程距离范围搜索 默认半径1000米内

         'radius' => 1000 ,

    );

    /*

    * 计算交通方便不方便

    */

    public function calculateTraffic($addr = ""){

    //地址转坐标接口

    $resultgeo = $this->baidumapGeocoder($addr);

    //坐标查周围基础设施(地铁 公交)

    $resultplace = $this->baidumapPlacesearch($resultgeo);

    if(!empty($resultplace)){

    $subways = false !== strpos($resultplace['address'],"路") ? $resultplace['name']."公交站" : $resultplace['name']."地铁站";

    $resultgeo['dlat'] = $resultplace['location']['lat'];

    $resultgeo['dlng'] = $resultplace['location']['lng'];

    //根据起始地址坐标和目的地坐标计算步行路程或者时间

    $resultRoutematrix = $this->baidumapRoutematrix($resultgeo);

    if((int)$this->findNum($resultRoutematrix[0]['duration']['text']) <= 10){ //小于10分钟内的算交通方便

    return "距离".$subways.' 步行'.$resultRoutematrix[0]['duration']['text'];

    }else{

    return "";

    }

    }else{

    return "";

    }

    }

    /*

    * 计算并提取数字

    */

    public function findNum($str=''){

    $str=trim($str);

    if(empty($str)){return '';}

    $result='';

    for($i=0;$i<=strlen($str);$i++){

    if(is_numeric($str[$i])){

    $result.=$str[$i];

    }

    }

    return $result;

    }

    /*

    * 地址转坐标接口

    */

    public function baidumapGeocoder($addr = ""){

    $result = $results = [];

    if(empty($addr)){

    return $result;

    }

    $searchUrl = C('BAIDUMAP')['geocoder_url'] . '?address='.$addr.'&output=json&ak='.$this->baidumapak;

    //echo 'searchUrl:'.$searchUrl.PHP_EOL;

    $result = (new HttpClient())->get($searchUrl);

    $result = json_decode($result, true);

    if($result['status'] !== 0){

    return $results;

    }

    return $result['result']['location'];

    }

    /*

    * 坐标查周围基础设施(地铁 公交)

    */

    public function baidumapPlacesearch($location = []){

    $result = $results = [];

    if(empty($location)){

    return $result;

    }

    $searchUrl = C('BAIDUMAP')['placesearch_url'] . '?query=地铁$公交&location='.$location['lat'].','.$location['lng'].'&radius='.$this->baidumapradius.'&output=json&ak='.$this->baidumapak;

    //echo 'searchUrl:'.$searchUrl.PHP_EOL;

    $result = (new HttpClient())->get($searchUrl);

    $result = json_decode($result, true);

    if($result['status'] !== 0){

    return $results;

    }

    return $result['results'][0];

    }

    /*

    * 根据起始地址坐标和目的地坐标计算步行路程或者时间

    */

    public function baidumapRoutematrix($location = []){

    $result = $results = [];

    if(empty($location)){

    return $result;

    }

    $searchUrl = C('BAIDUMAP')['routematrix_url'] . '?output=json&origins='.$location['lat'].','.$location['lng'].'&destinations='.$location['dlat'].','.$location['dlng'].'&ak='.$this->baidumapak;

    //echo 'searchUrl:'.$searchUrl.PHP_EOL;

    $result = (new HttpClient())->get($searchUrl);

    $result = json_decode($result, true);

    if($result['status'] !== 0){

    return $results;

    }

    return $result['result'];

    }

    calculateTraffic(“北京市海淀区中关村理想国际大厦”);

    至此完毕

    相关文章

      网友评论

          本文标题:通过地点获取周边地铁和公交信息

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