Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据经度、纬度、速度和航向计算坐标_Php_Math_Latitude Longitude_Coordinate Systems - Fatal编程技术网

Php 根据经度、纬度、速度和航向计算坐标

Php 根据经度、纬度、速度和航向计算坐标,php,math,latitude-longitude,coordinate-systems,Php,Math,Latitude Longitude,Coordinate Systems,在过去的24小时里我一直在努力解决这个问题 以下是假设: 当前经度(十进制格式):53.3205556 当前纬度(十进制格式):-1.7297223 行驶距离(公里):1400公里 航向(度):45° 我想在1400公里后用小数计算新的坐标。这是我的代码(PHP) 不幸的是,新经度和纬度的结果是错误的(地图上显示的结果不一致)。我已经完全遵循了这个公式,但尽管有这个网站,我还是找不到解决方案。如果几年前的内存可用,你需要一个名为的东西来解决这个问题,假设你使用的是WGS84坐标。除非你在这个

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

以下是假设:


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

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

行驶距离(公里):1400公里

航向(度):45°


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


不幸的是,新经度和纬度的结果是错误的(地图上显示的结果不一致)。我已经完全遵循了这个公式,但尽管有这个网站,我还是找不到解决方案。

如果几年前的内存可用,你需要一个名为的东西来解决这个问题,假设你使用的是WGS84坐标。

除非你在这个函数之外使用它,您还需要将初始lat/long转换为弧度,并将公式的结果转换为度。

您应该进一步解释45°的定义轴/平面。完成!我不确定这是否是决定性的信息。你应该纠正你的解释。如果你在给定的坐标处,以45°的东北角移动,那么角度将由赤道定义,或者由磁力线向南(位于北方)定义。对不起,我不明白。磁北始终是指南针上的磁北。即使在南半球,45°的移动也将是东北方向。。。你想让我怎么纠正我的解释?啊,你在使用这个公式。你记得把初始的纬度/长转换成弧度,然后把结果的纬度/长转换成度吗?是的,我在帖子中的链接提到了这一点。没有帮助。我不是数学大师,但我很确定我的公式已经是哈弗森公式(计算两点之间的距离)的变体。你是对的,这是一个错误。。。现在更正。事实上,它甚至值得投票支持,因为哈弗森公式可能会帮助其他人,我想哦,现在我认为如果我尝试投票支持它,会有一个错误,投票反对??您只能投票一次,向下或向上(然后撤消任意次数)
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
    );
}