已知一点坐标(经纬度),如何判断其方圆500米的范围?

本文介绍了一种使用PHP计算给定经纬度坐标周围指定距离的正方形四个顶点的方法。通过运用球面计算公式,如haversin公式,来确定地理坐标上的矩形范围。文章提供了一个实用的函数实现,用于地理信息系统或地图应用中的位置查询。

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

你可以先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录;如下图

参考wiki百科上的一些球面计算公式:

假设已知点的经纬度分别为$lng, $lat先实现经度范围的查询,在haversin公式中令φ1 = φ2,可得:

用PHP进行计算,就是:

 $dlng = 2 * asin(sin($distance / (2 * self::EARTH_RADIUS) / cos(deg2rad($lat))));
        $dlng = rad2deg($dlng);

然后是纬度范围的查询,在haversin公式中令 Δλ = 0,可得

在PHP中进行计算,就是:

$dlat = $distance / self::EARTH_RADIUS;
$dlat = rad2deg($dlat);

最后,就可以得出四个点的坐标:

left-top : (lat + dlat, lng – dlng)

right-top : (lat + dlat, lng + dlng)

left-bottom : (lat – dlat, lng – dlng)

right-bottom: (lat – dlat, lng + dlng)

 

我把以上方法写成了一个函数,综合起来就是:

const EARTH_RADIUS = 6371;//地球半径,平均半径为6371km
/**
 * 计算某个经纬度的周围某段距离的正方形的四个点
 * @param $lng  经度
 * @param $lat  纬度
 * @param float $distance 该点所在圆的半径,该圆与此正方形内切,默认值为0.5km
 * @return array
 */
public static function squarePoint($lng, $lat, $distance=0.5)
{
    $dlng = 2 * asin(sin($distance / (2 * self::EARTH_RADIUS) / cos(deg2rad($lat))));
    $dlng = rad2deg($dlng);
    $dlat = $distance / self::EARTH_RADIUS;
    $dlat = rad2deg($dlat);
    return [
        ['lat' => $lat + $dlat, 'lng' => $lng + $dlng],//东北
        ['lat' => $lat + $dlat, 'lng' => $lng - $dlng],//西北
        ['lat' => $lat - $dlat, 'lng' => $lng - $dlng],//西南
        ['lat' => $lat - $dlat, 'lng' => $lng + $dlng],//东南
    ];
}

 

参考:https://zhidao.baidu.com/question/391364265109203045.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值