计算未来的位置

时间:2011-05-20 15:53:28

标签: java math position latitude-longitude

我已获得有关实体的信息:

纬度/多头位置 标题(在Radians中) 速度(以节为单位)

假设实体在恒定高度以恒定速度沿直线移动,我如何计算实体lat / long位置在任意时间点的位置(或以间隔计算其位置)?

(正如你所知,我的数学技能很弱)

2 个答案:

答案 0 :(得分:2)

首先,你不能在一条直线上同时在恒定高度上移动。您的Lat / Long坐标位于参考椭球上(很可能是WGS84)。 它们是各种库或数据库扩展,它们具有一系列功能,可以直接解决这些问题。例如Postgis就是其中之一。他们中的大多数是免费的,经过测试并且可以工作我不建议你自己尝试实现这个(假设地球是一个半径为r的完美球体),因为你必须考虑你正在使用的参考椭球。

答案 1 :(得分:1)

考虑到Hyperboreus提供的答案,这里有航空公式:http://williams.best.vwh.net/avform.htm,其中包含用于计算给定起点,角度和距离的新纬度/经度的公式。你必须自己计算距离。听起来你拥有计算距离所需的一切,因为速度只是距离/时间,如果你乘以你想要使用的时间偏移,你就得到了你的距离。

1节= 1 NM / hr distance = yourTimeInDecimalHours * speed;

代码示例来说明这一点(从上面引用的链接中复制):

double lat1 = 0, lon1 = 0;                      // NOTE: these are in radians - remember PI/2 radians = 90 degrees
double d = timeInDecimalHours * speedInKnots;   // so a half hour at 35 knots would be .5 * 35
double tc = usersTrueCourse;                    // aka user's heading
double lat=                                     // this will be in radians!!
    Math.asin(
        Math.sin(lat1) 
        * Math.cos(d)
        + Math.cos(lat1)
        * Math.sin(d)
        * Math.cos(tc)
    );
double lon = 0;
if (Math.cos(lat) == 0) {
    lon = lon1      // endpoint a pole
} else {
    lon = (lon1 - Math.asin(Math.sin(tc)*Math.sin(d)/Math.cos(lat)) + Math.PI % (2*Math.PI))-Math.PI;
}
相关问题