You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP判断经纬度点是否在圆形区域(含边界)内的问题求助

正确判断经纬度点是否在圆形区域内的PHP实现

之前方法的问题

  • 第一种方法里的^是PHP的按位异或运算符,不是用来计算平方的幂运算,正确的平方计算应该用$dx ** 2或者pow($dx, 2),这本身就是语法错误。
  • 更关键的是:经纬度是球面地理坐标,不是平面直角坐标。直接用平面勾股定理算距离完全不对——经度每度对应的地面距离会随纬度变化,越靠近两极越短,而且地球是曲面,两点间的实际距离得用球面距离公式计算。

正确实现代码

用Haversine公式计算两点间的球面距离(单位:米),再和半径对比:

public function pointInCircle($circleLat, $circleLng, $radiusMeters, $pointLat, $pointLng)
{
    // 地球平均半径,单位:米
    $earthRadius = 6371000;

    // 将角度转换为弧度(三角函数计算需要弧度值)
    $latDiff = deg2rad($pointLat - $circleLat);
    $lngDiff = deg2rad($pointLng - $circleLng);

    // Haversine公式核心计算
    $a = sin($latDiff / 2) ** 2 +
         cos(deg2rad($circleLat)) * cos(deg2rad($pointLat)) *
         sin($lngDiff / 2) ** 2;
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    // 计算两点间的实际球面距离(米)
    $distance = $earthRadius * $c;

    // 判断点是否在圆内或边界上
    return $distance <= $radiusMeters ? "inside" : "outside";
}

代码说明

  1. 先把经纬度的差值转换成弧度,因为PHP的三角函数只接受弧度参数。
  2. Haversine公式是专门用来计算球面上两点最短距离(大圆距离)的标准公式,结果和实际地面距离误差极小。
  3. 最后把计算出的距离和给定的半径(米)比较,满足条件就返回"inside",否则返回"outside"。

内容的提问来源于stack exchange,提问作者Shasika Madhushan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:50:27