2

在过去的 24 小时里,我一直在努力解决这个问题......

以下是假设:


当前经度(十进制格式):53.3205556

当前纬度(十进制格式):-1.7297223

行驶距离(公里):1400km

航向度数:45°


我想在 1400 公里后以小数形式计算新坐标。这是我的代码(在 PHP 中)。

function calc_position($latitude, $longitude, $distance, $heading){

    $r = 6378;
    // Earth circonference
    // Convert heading in degres to radians
    $bearing = deg2rad($heading); 

    // Compute new latitude and longitude
    $latitude2 =  asin( (sin($latitude) * cos($distance/$r)) + (cos($latitude) * sin($distance/$r) * cos($bearing)) );
    $longitude2 = $longitude + atan2( sin($bearing)*sin($distance/$r)*cos($latitude), cos($distance/$r)-(sin($latitude)*sin($latitude2)) );

    return (object) array(
        'latitude' => $latitude2,
        'longitude' => $longitude2
    );
}

不幸的是,新经度和纬度的结果是错误的(地图上显示的不一致)。我已经彻底按照这里的教程来尝试这个公式,但是尽管有这个网站,我还是找不到解决方案。

4

2 回答 2

1

如果记忆是几年前的事,那么假设您使用的是 WGS84 坐标,您需要一个称为半正弦公式的东西来解决这个问题。

于 2012-11-18T23:05:18.497 回答
1

除非您在此函数之外执行此操作,否则您还需要将初始纬度/经度转换为弧度,并将公式的结果转换回度数。

于 2012-11-19T00:04:39.703 回答