使用百度地图API(php)获取两个地点之间的距离

需求: 用户输入起点,终点,需要显示亮点之间的距离. 解决思路:
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分钟"
}

你可能感兴趣的:(php)