我已经知道我当前的位置({lat:x,lon:y}),我知道我的速度和方向角;如何预测下一次的位置?
发布于 2013-10-24 17:03:32
这里在JS中,用于计算给定方位和距离的经度和lng:
//lat, lng in degrees. Bearing in degrees. Distance in Km
calculateNewPostionFromBearingDistance = function(lat, lng, bearing, distance) {
var R = 6371; // Earth Radius in Km
var lat2 = Math.asin(Math.sin(Math.PI / 180 * lat) * Math.cos(distance / R) + Math.cos(Math.PI / 180 * lat) * Math.sin(distance / R) * Math.cos(Math.PI / 180 * bearing));
var lon2 = Math.PI / 180 * lng + Math.atan2(Math.sin( Math.PI / 180 * bearing) * Math.sin(distance / R) * Math.cos( Math.PI / 180 * lat ), Math.cos(distance / R) - Math.sin( Math.PI / 180 * lat) * Math.sin(lat2));
return [180 / Math.PI * lat2 , 180 / Math.PI * lon2];
};
calculateNewPostionFromBearingDistance(60,25,30,1)
[60.007788047871614, 25.008995333937197]
发布于 2017-10-31 22:04:47
Java中的相同代码:
final double r = 6371 * 1000; // Earth Radius in m
double lat2 = Math.asin(Math.sin(Math.toRadians(lat)) * Math.cos(distance / r)
+ Math.cos(Math.toRadians(lat)) * Math.sin(distance / r) * Math.cos(Math.toRadians(bearing)));
double lon2 = Math.toRadians(lon)
+ Math.atan2(Math.sin(Math.toRadians(bearing)) * Math.sin(distance / r) * Math.cos(Math.toRadians(lat)), Math.cos(distance / r)
- Math.sin(Math.toRadians(lat)) * Math.sin(lat2));
lat2 = Math.toDegrees( lat2);
lon2 = Math.toDegrees(lon2);
发布于 2013-12-17 11:02:26
下面的代码适用于我:
我们必须计算距离(速度*时间)。代码将距离转换为KM,因为地球半径也以KM为单位。
const double radiusEarthKilometres = 6371.01f;
kmDistance = kmSpeed * (timer1.Interval / 1000f) / 3600f;
var distRatio = kmDistance / radiusEarthKilometres;
var distRatioSine = Math.Sin(distRatio);
var distRatioCosine = Math.Cos(distRatio);
var startLatRad = deg2rad(lat0);
var startLonRad = deg2rad(lon0);
var startLatCos = Math.Cos(startLatRad);
var startLatSin = Math.Sin(startLatRad);
var endLatRads = Math.Asin((startLatSin * distRatioCosine) + (startLatCos * distRatioSine * Math.Cos(angleRadHeading)));
var endLonRads = startLonRad
+ Math.Atan2(Math.Sin(angleRadHeading) * distRatioSine * startLatCos,
distRatioCosine - startLatSin * Math.Sin(endLatRads));
newLat = rad2deg(endLatRads);
newLong = rad2deg(endLonRads);
https://stackoverflow.com/questions/19352921
复制相似问题