在过去的 24 小时内我一直在尝试解决这个问题......
以下是假设:
当前经度(十进制格式):53.3205556
当前纬度(十进制格式): -1.7297223
行驶距离(公里):1400公里
航向度数: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
);
}
不幸的是,新经度和纬度的结果是错误的(在地图上显示不一致)。我已经彻底按照教程 这里 尝试这个公式,但尽管有这个网站,我还是无法找到解决方案。
除非你在这个函数之外这样做,否则你还需要将初始经度/经度转换为弧度,并将公式的结果转换回度数。
如果没记错的话,假设你使用的是WGS84坐标,你需要一个叫做haversine公式的东西来解决这个问题。