两个GPS-点之间计算在(X,Y)的距离(Calculate distance in (x, y)

2019-08-20 12:21发布

我正在寻找一种方式平滑计算两个GPS点之间的距离,让我得到这样的结果:“你必须去X公尺高和y米向左 - 这样我就可以用一个二维坐标系统中工作,其中我有作为(0,0)的位置和其他位置被示出从我的位置以米在(X,Y)的距离。

我的想法是利用计算haversine公式点之间的距离。 (这将返回我的斜边)

除此之外,我计算这两个点之间的轴承。 这是我的阿尔法。

有了这个两个值,我想用基本的三角函数来解决我的问题。

于是,我就计算: catheti_1 = sin(alpha) * hypotenuse, catheti_2 = cos(alpha) * hypotenuse

也许我做错了什么,但我的结果是目前无用。

所以我的问题是:如何计算两个GPS点之间的X距离和Y方向?

我计算阿尔法以下过程:

public static double bearingTo(GPSBean point1, GPSBean point2) {
    double lat1 = Math.toRadians(point1.latitude);
    double lat2 = Math.toRadians(point2.latitude);
    double lon1 = Math.toRadians(point1.longitude);
    double lon2 = Math.toRadians(point2.longitude);

    double deltaLong = lon2 - lon1;

    double y = Math.sin(deltaLong) * Math.cos(lat2);
    double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
            * Math.cos(lat2) * Math.cos(deltaLong);
    double bearing = Math.atan2(y, x);

    return (Math.toDegrees(bearing) + 360) % 360;
}

Answer 1:

我刚刚实施了代码,使用纽约和波士顿的大致坐标作为参考点,并实施haversine公式如发现http://www.movable-type.co.uk/scripts/latlong.html (你没节目):

long1 = -71.02; lat1 = 42.33;
long2 = -73.94; lat2 = 40.66;

lat1 *=pi/180;
lat2 *=pi/180;
long1*=pi/180;
long2*=pi/180;

dlong = (long2 - long1);
dlat  = (lat2 - lat1);

// Haversine formula:
R = 6371;
a = sin(dlat/2)*sin(dlat/2) + cos(lat1)*cos(lat2)*sin(dlong/2)*sin(dlong/2)
c = 2 * atan2( sqrt(a), sqrt(1-a) );
d = R * c;

当我运行这段代码,我得到d = 306 ,这与上述网站的答案一致。

对于轴承我得到52度 - 再次,接近现场给予了什么。

没有看到你的代码的其余部分,很难知道为什么你的答案是不同的。

注意:当两个点靠近在一起,你可以做出各种近似的,但是这个代码应该仍然工作-公式具有数值稳定性好,因为它是使用sin经度之间的差异,纬度(而不是的区别罪)。

附录:

使用你的代码为X,Y(你的问题),我得到合理值的距离 - 120米(这是不坏之内与“正确”的答案同意,因为一个是直线逼近和其他跟随地球的曲率)。 因此,我认为你的代码基本上是OK,现在你固定的错字。



Answer 2:

使用半正矢公式计算由纬度/经度指定的两个点之间的距离(单位:公里)(以数字度)

从:半正矢式 - RW辛诺特“的半正矢的德”

天空和望远镜,第68卷,第2,1984年

http://www.census.gov/cgi-bin/geo/gisfaq?Q5.1

示例用法从形式:

result.value = LatLon.distHaversine(lat1.value.parseDeg(), long1.value.parseDeg(), * lat2.value.parseDeg(), long2.value.parseDeg());

使用Javascript:

LatLon.distHaversine = function(lat1, lon1, lat2, lon2) {
   var R = 6371; // earth's mean radius in km
   var dLat = (lat2-lat1).toRad();
   var dLon = (lon2-lon1).toRad();
   lat1 = lat1.toRad(), lat2 = lat2.toRad();
   var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
   Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon/2) * Math.sin(dLon/2);
   var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
   var d = R * c;

   return d;
}


文章来源: Calculate distance in (x, y) between two GPS-Points