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

您所在的位置:网站首页 百度地图经纬度怎么找到 已知一点坐标(经纬度),如何判断其方圆500米的范围?

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

2023-07-17 13:34| 来源: 网络整理| 查看: 265

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

参考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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3