PHP 计算指定半径内经纬度范围(四个角落坐标)
本文将分享 PHP 计算当前坐标指定距离内四个角落经纬度的方法,主要利用地球半径与经纬度偏差公式,快速生成用于地理位置筛选的边界参数。
场景说明与结果
在处理地理位置相关功能时,往往需要根据一个中心点(如用户当前位置)和搜索半径(如 3 公里),快速找出覆盖该范围的矩形区域,即左上、右上、左下、右下四个关键点的经纬度。这一过程常用于数据库的范围查询(BETWEEN)或地图 API 的初始视野设置。
以下示例演示如何在 PHP 中以 6371 千米为地球平均半径,计算半径 3 公里内的经纬度偏移量,并返回四个角落的坐标数组。
准备条件
需要已知的当前经纬度变量:
$lng:经度(Longitude),单位为十进制度数。$lat:纬度(Latitude),单位为十进制度数。
注意:PHP 的三角函数需要使用弧度制,因此涉及角度转换时需使用 deg2rad() 和 rad2deg()。
第 1 步:定义基础参数
设置地球平均半径和搜索距离(单位统一为千米):
$half = 6371; // 地球平均半径 (km)
$distance = 3; // 搜索距离 (km)
第 2 步:计算经度与纬度的偏移量
由于地球是球体,经度线的长度随纬度变化(赤道最长,极点为 0)。纬度线的长度在局部可近似为常数。需分别计算经度偏差 $dlng 和纬度偏差 $dlat:
- 计算纬度偏差 ($dlat): 纬度方向上,1 弧度约为地球半径的距离。
目的:确定南北方向的度数偏移量。$dlat = $distance / $half; // 弧度 $dlat = rad2deg($dlat); // 转换为角度 - 计算经度偏差 ($dlng): 经度方向的弧长受余弦函数影响,公式为
sin(θ) = sin(d/R) / cos(lat)。
目的:根据当前纬度校正东西方向的度数偏移量,确保在不同纬度下“3公里”的实际地理跨度准确。$dlng = 2 * asin(sin($distance / (2 * $half)) / cos(deg2rad($lat))); $dlng = rad2deg($dlng); // 转换为角度
第 3 步:生成四个角落坐标
基于中心点和偏差量,组合出四个角的经纬度:
$fourpoint = array(
'left-top' => array('lat' => $lat + $dlat, 'lng' => $lng - $dlng),
'right-top' => array('lat' => $lat + $dlat, 'lng' => $lng + $dlng),
'left-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng - $dlng),
'right-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng + $dlng)
);
完成状态:此时 $fourpoint 数组包含了左上、右上、左下、右下四个关键点,可用于后续的 SQL BETWEEN lng AND lng 和 BETWEEN lat AND lat 查询以缩小检索范围。
简要总结
以上就是利用 PHP 计算指定经纬度范围内四个角落最大最小经纬度的详细内容,更多关于 PHP 地理位置处理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













