下面是详细的攻略:
下面是详细的攻略:
背景说明
在开发地图类的应用中,经常会遇到需要计算两个经纬度坐标之间距离的需求。PHP作为一种广泛应用于Web开发的语言,在这方面也有很好的解决方案。
实现思路
计算两个经纬度坐标之间的距离,需要用到地球表面的弧长公式。常用的公式有“半正矢经度公式”、“球面三角法”、“平面直角坐标法”等,其中以“半正矢经度公式”最为常用。该公式的数学表示为:
d = 2Rarcsin(sqrt(sin^2((lat2-lat1)/2) + cos(lat1)cos(lat2)sin^2((lng2-lng1)/2)))
其中,d代表距离;lat1、lng1和lat2、lng2分别是两个经纬度坐标的纬度和经度;R是地球半径,取值为6371km;arcsin()为反正弦函数。
具体实现
1. 使用 PHP 标准库实现
PHP 的标准库中提供了一个名为 haversineGreatCircleDistance
的函数,可以用于计算两个经纬度坐标之间的距离。具体用法如下所示:
function distance($lat1, $lng1, $lat2, $lng2) {
$earthRadius = 6371;
$dLat = deg2rad($lat2 - $lat1);
$dLng = deg2rad($lng2 - $lng1);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLng/2) * sin($dLng/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
return $earthRadius * $c;
}
其中,$lat1、$lng1和$lat2、$lng2分别是两个经纬度坐标的纬度和经度。
该方法与上面提到的“半正矢经度公式”类似,只是计算方法略有不同。该方法不需要调用任何外部库,因此具有较好的兼容性。
2. 使用百度地图API实现
百度地图提供了很多功能强大的API,包括计算两个经纬度坐标之间的距离。具体可以通过调用百度地图Web服务API中的 place api
接口实现。以下是示例代码:
function distance($lat1, $lng1, $lat2, $lng2) {
$url = "http://api.map.baidu.com/place/v2/suggestion?query=%s®ion=%s&city_limit=true&output=json&ak=%s";
$ak = "提供的AK值";
$query = sprintf($url, $query, $region, $ak);
$result = file_get_contents($query);
$json = json_decode($result);
return $json->result->distance;
}
其中,$lat1、$lng1和$lat2、$lng2分别是两个经纬度坐标的纬度和经度。这里用到了百度地图 Web 服务API提供的 suggestion
接口,该接口返回的结果中包括了两个经纬度坐标之间的距离。
总结
以上两种方法都可以有效实现计算两个经纬度坐标之间距离的功能,具体使用哪种方法取决于项目需求和所用平台。如果不需要调用任何外部库,使用PHP自带的标准库也是一个不错的选择。如果使用百度地图API已经接入项目,也可以直接调用相应API实现。
本文标题为:php实现计算百度地图坐标之间距离的方法


基础教程推荐
- PHP 实现手机端APP支付宝支付功能 2022-10-27
- Laravel中validation验证 返回中文提示 全局设置的方法 2023-02-20
- Laravel实现搜索的时候分页并携带参数 2023-03-02
- PHP 导出Excel示例分享 2024-02-09
- 微信公众平台开发教程②微信端分享功能图文详解 2023-01-05
- thinkphp 中的volist标签在ajax操作中的特殊性(推荐) 2022-10-05
- Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码 2023-07-12
- Laravel框架FormRequest中重写错误处理的方法 2022-12-22
- PHP 的比较运算与逻辑运算详解 2024-02-13
- PHP接入Apple对access_token/identityToken进行JWT验证流程详解 2023-07-03