从两个GPS坐标计算以米为单位的矢量

时间:2017-01-28 17:01:54

标签: math gps

我需要从两个GPS坐标计算距离矢量。 目的是计算一个人的位置变化的矢量, 所以坐标彼此不远。 我想以米为单位计算纬度和纵向距离。

我找到了here的东西, 但这只能给出没有距离的方向。

1 个答案:

答案 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的结果。 我的结果可能更准确! ^^