Fra*_*e91 5 gps latitude-longitude
我正在寻找一种平滑的方法来计算两个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;
}
Run Code Online (Sandbox Code Playgroud)
我刚刚使用NYC和Boston的近似坐标作为参考点来实现您的代码,并实现了在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;
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到了d = 306,这与上述网站的答案一致.
对于轴承,我再次达到52度,接近现场给出的值.
没有看到你的其余代码,很难知道为什么你的答案是不同的.
注意:当两个点靠近在一起时,你可以进行各种近似,但这个代码仍然可以工作 - 公式具有良好的数值稳定性,因为它使用了sin经度,纬度之间的差异(而不是罪的差异) ).
附录:
使用你的代码x,y(在你的问题中),我得到距离的合理值 - 同意120米内的"正确"答案(这是不错的,因为一个是直线近似,另一个是跟随地球的曲率).所以我认为你的代码基本上没问题,现在你修复了错字.