PHP根据经纬度计算两地之间的距离
封面图
•
2025-11-17
•
PHP
265
0
0
0
在 PHP 中,可以根据两个地点的经纬度来计算它们之间的直线距离(即**大圆距离**)。常用的方法是使用 **Haversine 公式**,这是一种用于计算球面上两点之间最短距离的算法。 --- ### ✅ Haversine 公式简介 Haversine 公式如下: $$ a = \sin^2\left(\frac{\Delta \phi}{2}\right) + \cos(\phi_1) \cdot \cos(\phi_2) \cdot \sin^2\left(\frac{\Delta \lambda}{2}\right) $$ $$ c = 2 \cdot \text{atan2}(\sqrt{a}, \sqrt{1-a}) $$ $$ d = R \cdot c $$ 其中: - $ \phi $ 是纬度(以弧度为单位) - $ \lambda $ 是经度(以弧度为单位) - $ R $ 是地球半径(平均约为 6371 km) --- ### 🧠 PHP 实现代码 ```php <?php function calculateDistance($lat1, $lon1, $lat2, $lon2) { // 将角度转换为弧度 $lat1 = deg2rad($lat1); $lon1 = deg2rad($lon1); $lat2 = deg2rad($lat2); $lon2 = deg2rad($lon2); // 地球半径(km) $R = 6371; // 计算纬度和经度的差值 $dLat = $lat2 - $lat1; $dLon = $lon2 - $lon1; // Haversine 公式 $a = sin($dLat / 2) * sin($dLat / 2) + cos($lat1) * cos($lat2) * sin($dLon / 2) * sin($dLon / 2); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); // 计算距离(单位:公里) $distance = $R * $c; return $distance; } // 示例用法 $lat1 = 39.9042; // 北京纬度 $lon1 = 116.4074; // 北京经度 $lat2 = 31.2304; // 上海纬度 $lon2 = 121.4737; // 上海经度 $distance = calculateDistance($lat1, $lon1, $lat2, $lon2); echo "两地之间的距离是:". round($distance, 2) . " 公里"; ?> ``` --- ### 📌 输出示例 ``` 两地之间的距离是:1068.16 公里 ``` --- ### 🔄 可选:返回米或英里 如果你需要返回 **米** 或 **英里**,可以修改 `R` 的值: - 米:`$R = 6371000;` - 英里:`$R = 3958.8;` --- ### ✅ 注意事项 - 纬度和经度必须是十进制度数(如 `39.9042`)。 - 如果你有多个点,可以用这个函数进行批量计算。 - 这个公式假设地球是一个完美的球体,实际误差在 0.5% 左右,对于大多数应用已足够精确。 --- 如果你有其他需求(比如使用 MySQL 的地理空间功能、使用 Google Maps API 等),也可以告诉我,我可以提供更详细的方案。
上一篇:
在PHP中读取二进制文件
下一篇:
用PHP编写PDF文档生成器
标题录入,一次不能超过6条
留言
评论