2011-05-20 73 views
4

我已经得到了有关实体的信息:计算未来位置

纬度/经度位置 标题(弧度) 速度(节)

如何计算,其中实体LAT /假设实体在一个恒定的高度以恒定速度移动,那么多头头寸将处于任意时间点(或者以间隔计算其位置)?

(正如你所知道的,我的数学能力较弱)

+0

这题外话(应该是http://math.stackexchange.com或类似的)。 – 2011-05-20 15:54:43

+1

@Oli,这里很好。数学SE是真正的高等数学比这个。 – 2011-05-20 16:05:58

+0

@Mike:也许你对Math SE是对的。但是这个问题完全不依赖于编程,所以我不同意这是关于主题的。 – 2011-05-20 16:14:48

回答

2

首先,你可以在一条直线上,并在同一时间在一个恒定的高度不动。您的纬度/经度坐标位于参考椭球(最可能是WGS84)上方。 他们是各种图书馆或数据库扩展,有一大堆功能来完成这类问题。 Postgis就是其中之一。他们中的大多数都是免费的,经过测试并且能够工作我不建议自己尝试实现这一点(假设地球是一个半径为r的完美球体),因为您必须考虑到所使用的参考椭球体。

1

考虑到Hyperboreus提供的答案,这里有航空公式:http://williams.best.vwh.net/avform.htm,它具有计算给定起点的新纬度/经度的公式,以及角度和距离。你将不得不自己计算距离。这听起来像你有一切你需要计算的距离,虽然速度只是距离/时间,如果你乘以时间偏移你想使用,你有你的距离。

1 knot = 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; 
} 
+0

另外,根据Hyperboreus的评论,我认为航空公式考虑到你不能以真正的直线移动并且仍然保持恒定的高度(相对于地球)。关于航空公式的一个很酷的事情是,他们考虑到了这一点,并且计算都是“大圆圈”数学。 – Travis 2011-05-26 12:51:49