gpt4 book ai didi

gps - 计算两个 GPS 点之间的 (x, y) 距离

转载 作者:行者123 更新时间:2023-12-04 18:10:13 30 4
gpt4 key购买 nike

我正在寻找一种平滑的方法来计算两个 GPS 点之间的距离,所以我得到的结果是:“你必须向上走 x 米,向左走 y 米——这样我才能使用二维坐标系统,我的位置为 (0,0),其他位置显示 (x, y) 与我的位置之间的距离(以米为单位)。

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

除此之外,我正在计算这两点之间的方位。这是我的阿尔法。

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

所以我试着计算:catheti_1 = sin(alpha) * hypotenuse, catheti_2 = cos(alpha) * hypotenuse .

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

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

我正在按以下过程计算 alpha:

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;
}

最佳答案

我刚刚实现了您的代码,使用纽约市和波士顿的近似坐标作为引用点,并实现了在 http://www.movable-type.co.uk/scripts/latlong.html 中找到的Haversine 公式。 (你没有显示):

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 m 内的“正确”答案(这不错,因为一个是直线近似值,另一个遵循地球的曲率)。所以我认为你的代码基本上没问题,现在你修正了错字。

关于gps - 计算两个 GPS 点之间的 (x, y) 距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890081/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com