最近在做一个简历相关的项目 里面有一个有意思的功能 效果图如下:
经过对百度地图的研究以及我目前有的数据(只有一个工作地点) 需要经过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(“北京市海淀区中关村理想国际大厦”);
至此完毕