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

本文介绍如何使用百度地图API根据地点名称获取经纬度,并计算两点间的实际距离。通过具体代码示例,展示了从地址到经纬度的转换过程及基于经纬度计算距离的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值