【问题标题】:Computing coordinates from longitude, latitude, speed and heading从经度、纬度、速度和航向计算坐标
【发布时间】:2012-11-18 23:01:05
【问题描述】:

在过去的 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
    );
}

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

【问题讨论】:

  • 您或许应该进一步解释一下 45° 定义在哪个轴/平面上。
  • 完成!我不确定这是决定性的信息思想。
  • 你应该更正你的解释。如果您在给定的坐标处并以 45°(即东北方向)行进,则该角度将由赤道或大约线定义。朝向磁南(位于北)。
  • 对不起,我不明白。磁北始终是指南针上的磁北。即使在南半球,行驶 45° 也将是 NE...你让我如何更正我的解释?
  • 啊,您在页面下方使用该公式。您是否记得将初始纬度/经度转换为弧度,然后将得到的纬度/经度转换回度数?

标签: php math latitude-longitude coordinate-systems


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果记忆是几年前的事,假设您使用 WGS84 坐标,您需要一个名为 haversine formula 的东西来解决这个问题。

    【讨论】:

    • 是的,我在帖子中提供的链接中提到了这一点。没有帮助。我不是数学大师,但我很确定我的公式已经是 hasrsine forumla 的变体(计算 2 点之间的距离)。
    • 你是对的,这是一个错误......现在更正了。它实际上甚至值得投票,因为 Haversine 公式可能会帮助我认为的其他人
    • 哦,现在我认为如果我尝试投赞成票就会出现错误...... ??
    • 您只能投票一次,向下或向上(然后撤消任意次数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多