如何在PHP中通过经纬度计算方位(北、东、西、南)并求代码示例
PHP 经纬度计算方位(北/东/南/西)实现
你的原有代码存在几个关键问题:未将经纬度转换为弧度(PHP三角函数默认使用弧度计算)、atan2参数顺序错误,且缺少角度转方位的映射逻辑。以下是修正后的完整实现:
<?php // 起点经纬度(转为浮点数) $lat1 = (float)"43.8704455"; $lon1 = (float)"-79.4508084"; // 终点经纬度(转为浮点数) $lat2 = (float)"43.7607414"; $lon2 = (float)"-79.4873425"; // 转换为弧度(PHP三角函数仅支持弧度输入) $lat1Rad = deg2rad($lat1); $lon1Rad = deg2rad($lon1); $lat2Rad = deg2rad($lat2); $lon2Rad = deg2rad($lon2); // 计算经度差 $deltaLon = $lon2Rad - $lon1Rad; // 计算方位角(弧度) $y = sin($deltaLon) * cos($lat2Rad); $x = cos($lat1Rad) * sin($lat2Rad) - sin($lat1Rad) * cos($lat2Rad) * cos($deltaLon); $bearingRad = atan2($y, $x); // 将弧度转为度数,并调整至0-360°范围 $bearingDeg = rad2deg($bearingRad); $bearingDeg = ($bearingDeg + 360) % 360; // 映射度数到方位方向 $directions = [ '北', '东北', '东', '东南', '南', '西南', '西', '西北', '北' ]; $index = round($bearingDeg / 45); $direction = $directions[$index]; // 输出结果 echo "方位方向:{$direction}<br>"; echo "方位角度:{$bearingDeg}°"; ?>
关键说明
- 弧度转换:PHP的
sin/cos等三角函数仅接受弧度值,必须用deg2rad()将经纬度从度数转为弧度。 - 方位角计算:采用标准大圆方位角公式,确保计算精度。
- 角度校准:通过
($bearingDeg + 360) % 360将负角度调整为0-360°的正角度。 - 方位映射:将360°划分为8个45°区间,对应8个常用方位(最后重复'北'是为了处理360°与0°等价的情况)。
内容的提问来源于stack exchange,提问作者Arnab Bose
相关产品推荐
相关产品推荐

