如何基于指定地理范围实现周边人员检索?
查找指定范围内周边人员的实现方案
最近我一直在琢磨怎么找出自己位置周边特定范围内的人员——比如说周边5公里内的所有人。经过好几次调研调整,总算把这个功能做出来了,现在运行得挺稳的。下面是核心的实现代码:
$lat = $latMe; // 我的纬度 $lon = $lonMe; // 我的经度 $rad = $distancePeople; // 设定的范围半径,比如10公里 $R = 6371; // 地球半径(单位:公里) $maxLat = $lat + rad2deg($rad/$R); $minLat = $lat - rad2deg($rad/$R); // 补充经度范围计算(完整实现必备,经度跨度随纬度变化) $maxLon = $lon + rad2deg($rad/($R * cos(deg2rad($lat)))); $minLon = $lon - rad2deg($rad/($R * cos(deg2rad($lat))));
几点实用说明:
- 这段代码先通过地球半径和设定的距离范围,计算出当前位置对应的纬度、经度的最大/最小值范围,得到一个覆盖目标区域的矩形
- 实际应用里,你可以先用这个矩形范围去数据库筛选人员,缩小查询范围提升效率;之后再用球面距离公式精准过滤出真正在设定半径内的人员,保证结果精确性
- 地球半径这里用的是6371公里(平均半径),如果需要更精细的计算,可以根据需求调整为极半径或赤道半径
内容的提问来源于stack exchange,提问作者Siln6
相关产品推荐
相关产品推荐

