使用百度地图API获取两个地点)之间的距离
2017-06-16 本文已影响5135人
oneway3259
需求: 用户输入起点,终点,需要显示亮点之间的距离.
解决思路:
0.根据地点名称获取经纬度
1.根据两者经纬度获取实际距离
//根据名称 获取 经纬度
public static function getTraceByName($city='',$address='')
{
$result = array();
$result['lat'] = 0.00;
$result['lng'] = 0.00;
$ak = 'VdIYG885wGKdqCeERz4ICIQDSvaM64Y9';
$url ="http://api.map.baidu.com/geocoder/v2/?callback=renderOption&output=json&address=".$address."&city=".$city."&ak=".$ak;
$data = self::request($url);
$data = str_replace('renderOption&&renderOption(', '', $data);
$data = str_replace(')', '', $data);
$data = (CJSON::decode($data));
if (!empty($data) && $data['status'] == 0) {
$result['lat'] = $data['result']['location']['lat'];
$result['lng'] = $data['result']['location']['lng'];
}
return $result;
}
//根据 经纬度 获取距离
public static function getDistance($lat1=0,$lng1=0,$lat2=0,$lng2=0)
{
$result = array();
$result['distance'] = 0.00;//距离 公里
$result['duration'] = 0.00;//时间 分钟
$ak = 'VdIYG885wGKdqCeERz4ICIQDSvaM64Y9';
$url = 'http://api.map.baidu.com/routematrix/v2/driving?output=json&origins='.$lat1.','.$lng1.'&destinations='.$lat2.','.$lng2.'&ak='.$ak;
$data = self::request($url);
$data = (CJSON::decode($data));
if (!empty($data) && $data['status'] == 0) {
$result['distance'] = $data['result'][0]['distance']['text'];
$result['duration'] = $data['result'][0]['duration']['text'];
}
return $result;
}
最后的效果:
//起点
array(2) {
["city"]=>
string(6) "成都"
["address"]=>
string(10) "天府4街"
}
//起点经纬度
array(2) {
["lat"]=>
float(30.548549867524)
["lng"]=>
float(104.06383183981)
}
//终点
array(2) {
["city"]=>
string(6) "成都"
["address"]=>
string(12) "天府广场"
}
//终点经纬度
array(2) {
["lat"]=>
float(30.663537766216)
["lng"]=>
float(104.07234275272)
}
//距离和发费时间
array(2) {
["distance"]=>
string(10) "13.4公里"
["duration"]=>
string(8) "20分钟"
}