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

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

通过地点获取周边地铁和公交信息_第1张图片


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

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

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


通过地点获取周边地铁和公交信息_第2张图片

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

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


通过地点获取周边地铁和公交信息_第3张图片

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

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


通过地点获取周边地铁和公交信息_第4张图片

php简单代码实现如下:

1.配置文件

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(“北京市海淀区中关村理想国际大厦”);


至此完毕

你可能感兴趣的:(通过地点获取周边地铁和公交信息)