You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于经纬度向东南西北添加指定距离获取新坐标?

解决经纬度加减指定公里数生成正方形坐标的问题

你的代码出错核心原因是没有处理角度与弧度的转换,PHP的三角函数(sin、cos、atan2等)默认接受弧度值,而你直接传入了度数格式的经纬度和方位角,导致计算结果完全错误。

关键修正点

  • 所有度数格式的经纬度、方位角,必须先转为弧度再参与计算
  • 计算得到的弧度结果,要转回度数才是正确的经纬度值
  • 四个方位对应的方位角(bearing):
    • 北(North):0°
    • 东(East):90°
    • 南(South):180°
    • 西(West):270°

修正后的完整PHP代码

<?php
// 辅助函数:度数转弧度
function degreesToRadians($degrees) {
    return $degrees * pi() / 180;
}

// 辅助函数:弧度转度数
function radiansToDegrees($radians) {
    return $radians * 180 / pi();
}

// 基础参数
$distance = 100; // 延伸距离(公里)
$earthRadius = 6371; // 地球平均半径(公里)
$lat1 = -26.462049; // Jaraguá do Sul市纬度
$lon1 = -49.059448; // Jaraguá do Sul市经度

// 四个方位的方位角(度数)
$bearings = [
    '北' => 0,
    '东' => 90,
    '南' => 180,
    '西' => 270
];

// 遍历计算每个方位的坐标
foreach ($bearings as $direction => $bearingDeg) {
    // 转换所有参数为弧度
    $lat1Rad = degreesToRadians($lat1);
    $lon1Rad = degreesToRadians($lon1);
    $bearingRad = degreesToRadians($bearingDeg);
    $distanceRatio = $distance / $earthRadius;

    // 计算新纬度(弧度)
    $lat2Rad = asin(
        sin($lat1Rad) * cos($distanceRatio) +
        cos($lat1Rad) * sin($distanceRatio) * cos($bearingRad)
    );

    // 计算新经度(弧度)
    $lon2Rad = $lon1Rad + atan2(
        sin($bearingRad) * sin($distanceRatio) * cos($lat1Rad),
        cos($distanceRatio) - sin($lat1Rad) * sin($lat2Rad)
    );

    // 转回度数格式
    $lat2 = radiansToDegrees($lat2Rad);
    $lon2 = radiansToDegrees($lon2Rad);

    // 输出结果
    echo "{$direction}方坐标:纬度 {$lat2},经度 {$lon2}<br>";
}
?>

代码说明

  1. 用辅助函数明确弧度/度数转换逻辑,避免参数格式混淆
  2. 批量遍历四个方位,一次性计算并输出所有目标坐标点
  3. 严格遵循球面三角学的距离-方位计算公式,确保结果精度

运行这段代码后,你会得到Jaraguá do Sul市向东南西北各延伸100公里的四个坐标点,用这四个点即可画出目标正方形。

内容的提问来源于stack exchange,提问作者SUPER HERO PH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:34:53