PHP 计算指定半径内经纬度范围(四个角落坐标)

半杯拿铁
半杯拿铁
发布时间:2026-10-13 | 4人浏览过
原创

本文将分享 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:

  1. 计算纬度偏差 ($dlat): 纬度方向上,1 弧度约为地球半径的距离。
    $dlat = $distance / $half; // 弧度
    $dlat = rad2deg($dlat); // 转换为角度
    目的:确定南北方向的度数偏移量。
  2. 计算经度偏差 ($dlng): 经度方向的弧长受余弦函数影响,公式为 sin(θ) = sin(d/R) / cos(lat)。
    $dlng = 2 * asin(sin($distance / (2 * $half)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng); // 转换为角度
    目的:根据当前纬度校正东西方向的度数偏移量,确保在不同纬度下“3公里”的实际地理跨度准确。

第 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 地理位置处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表