我已获得有关实体的信息:
纬度/多头位置 标题(在Radians中) 速度(以节为单位)
假设实体在恒定高度以恒定速度沿直线移动,我如何计算实体lat / long位置在任意时间点的位置(或以间隔计算其位置)?
(正如你所知,我的数学技能很弱)
答案 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;
}