我需要从两个GPS坐标计算距离矢量。 目的是计算一个人的位置变化的矢量, 所以坐标彼此不远。 我想以米为单位计算纬度和纵向距离。
我找到了here的东西, 但这只能给出没有距离的方向。
答案 0 :(得分:0)
由于这些坐标在我的情况下非常接近, 我做了近似,即地球的中心和那两个点形成一个三角形。 因此,我可以使用Al Kashi theorem。
以下是代码:
// Common values
double b = EARTH_RADIUS + destination.altitude;
double c = EARTH_RADIUS + this.altitude;
double b2 = b*b;
double c2 = c*c;
double bc2 = 2*b*c;
// Longitudinal calculations
double alpha = destination.longitude - this.longitude;
// Conversion to radian
alpha = alpha * Math.PI / 180;
// Small-angle approximation
double cos = 1 - alpha*alpha/2; //Math.cos(alpha);
// Use the law of cosines / Al Kashi theorem
double x = Math.sqrt(b2 + c2 - bc2*cos);
// Repeat for latitudinal calculations
alpha = destination.latitude - this.latitude;
alpha = alpha * Math.PI / 180;
double cos = 1 - alpha*alpha/2; //Math.cos(alpha);
double y = Math.sqrt(b2 + c2 - bc2*cos);
// Obtain vertical difference, too
double z = destination.altitude - this.altitude;
return new Vector3D(x, y, z);
如你所见, 我已经近似了余弦,因为角度非常小。 我认为将高度添加到地球的半径并不能提供更好的近似值, 但既然我拥有它......
我测试了它与谷歌地图相比38米的距离我获得了37.877的结果。 我的结果可能更准确! ^^