🗣 Wd提问: PHP源码距离计算
🤖 Ai回答: 在PHP中,距离计算通常是指根据两个地理位置的经纬度来计算它们之间的距离。常用的距离计算方法有以下几种:
1、Haversine公式:用于计算球面上两点之间的最短距离(大圆距离)。
2、Vincenty公式:比Haversine公式更精确,考虑了地球的椭球形状。
3、简单的平面距离计算:适用于小范围内的距离计算,忽略地球曲率。
1、Haversine公式
Haversine公式是基于球体模型的,适合用于计算地球上两点之间的距离。它假设地球是一个完美的球体。
公式:
php
function haversineDistance($lat1, $lon1, $lat2, $lon2, $unit = 'K') {
$earth_radius = [
'K' = 6371, // Kilometers
'M' = 3958.8, // Miles
'N' = 3440.1, // Nautical miles
];
$R = $earth_radius[$unit];
$dLat = deg2rad($lat2 $lat1);
$dLon = deg2rad($lon2 $lon1);
$a = sin($dLat / 2) * sin($dLat / 2) +
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
sin($dLon / 2) * sin($dLon / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 $a));
$distance = $R * $c;
return $distance;
}
使用示例:
php
$lat1 = 38.897676; // 纬度1
$lon1 = -77.036529; // 经度1
$lat2 = 34.052235; // 纬度2
$lon2 = -118.243683; // 经度2
$distance = haversineDistance($lat1, $lon1, $lat2, $lon2, 'K'); // 单位为公里
echo Distance: 、$distance 、 km;
2、Vincenty公式
Vincenty公式比Haversine公式更精确,因为它考虑了地球的椭球形状。不过它的实现相对复杂一些。
示例代码:
php
function vincentyGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371) {
// 将角度转换为弧度
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$lonDelta = $lonTo $lonFrom;
$a = pow(cos($latTo) * sin($lonDelta), 2) +
pow(cos($latFrom) * sin($latTo) sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
$b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);
$angle = atan2(sqrt($a), $b);
return $angle * $earthRadius;
}
使用示例:
php
$lat1 = 38.897676; // 纬度1
$lon1 = -77.036529; // 经度1
$lat2 = 34.052235; // 纬度2
$lon2 = -118.243683; // 经度2
$distance = vincentyGreatCircleDistance($lat1, $lon1, $lat2, $lon2);
echo Distance: 、$distance 、 km;
3、平面距离计算(仅适用于小范围)
如果你只需要在一个小范围内计算距离,并且可以忽略地球的曲率,那么可以使用简单的平面距离公式。
示例代码:
php
function flatDistance($lat1, $lon1, $lat2, $lon2) {
$x = ($lon2 $lon1) * cos(($lat1 + $lat2) / 2);
$y = ($lat2 $lat1);
$distance = sqrt($x * $x + $y * $y) * 6371; // 地球半径为6371公里
return $distance;
}
使用示例:
php
$lat1 = 38.897676; // 纬度1
$lon1 = -77.036529; // 经度1
$lat2 = 38.897676 + 0.01; // 纬度2
$lon2 = -77.036529 + 0.01; // 经度2
$distance = flatDistance($lat1, $lon1, $lat2, $lon2);
echo Distance: 、$distance 、 km;
总结
如果你需要在全球范围内计算距离,推荐使用 Haversine公式 或 Vincenty公式。
如果你只需要在一个小范围内计算距离,并且精度要求不高,可以使用 平面距离计算。
选择合适的算法取决于你的应用场景和对精度的要求。
📣 商家广告:





0
IP地址: 158.163.87.203
搜索次数: 0
提问时间: 2025-11-05 22:34:41
🛒 域名购买:
75.gold
lytxw.com
kaosou.com.cn
9.gz.cn
wk.gs
jldj.cn
61.gold
s-x.com.cn
8.he.cn
wosou.com.cn
❓️ 热门提问:
vps win
免费云服务器
tomcat服务器优化
美国域名商注册
关键词广告效果
搭建授权服务器
厦门托管
便宜net域名
新加坡vps云主机带宽对比
品牌主机价格
豌豆Ai站群搜索引擎系统
🌐 域名评估:
www.6666.ltd
su7.js.cn
xuiz.cn
wzsx.net
jjxs.cn
hh.nx.cn
ff.js.cn
cnstarway.top
drone.zj.cn
trump.jl.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
検索エンジンのソースコード
青蛙搜索引擎系统
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。