在我的应用程序中,我需要找到一些(3个或更多)GPS点的中点。

我发现如下两点之间的距离

public class DistanceOfGeoPoints {
     public static long distanceinKMeters(double dblLat, double dblNewLat, double dblLong, double dblNewLong)
     {
         try
         {
             //double dblDistance = 180 / (dblPI * Math.Acos(Math.Sin(dblLat) * Math.Sin(dblNewLat) + Math.Cos(dblLat) * Math.Cos(dblNewLat) * Math.Cos(dblLong - dblNewLong)));

             double dblDegree2Radius = Math.PI / 180;
             double dbllongdiff = (dblNewLong - dblLong) * dblDegree2Radius;
             double dbllatdiff = (dblNewLat - dblLat) * dblDegree2Radius;
             double a = Math.pow(Math.sin(dbllatdiff / 2.0), 2) + Math.cos(dblNewLat * dblDegree2Radius) * Math.cos(dblLat * dblDegree2Radius) * Math.pow(Math.sin(dbllongdiff / 2.0), 2);
             double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
             double dblDistance = 6367 * c; //Earth Radius * value (result in KM)

             // return dblDistance;
             long intdistance = (Math.round(dblDistance * 1000));

             return intdistance;
         }
         catch (Exception ex)
         {
             return 0;
         }
     }
}

现在我想要N个GPS点的中点

请帮帮我。

最佳答案

欧几里得距离中两点的中点只是x和y坐标的平均值。如果我们仅对点A和B的纬度和经度求平均值,则可以在点A和B之间得到一个点,但不必等距。

您可能想要的是将球坐标转换为欧几里得坐标,通过对x和y求平均值来找到中点,然后转换回纬度和经度。

如果我们的得分超过2分,我们需要弄清楚“中点”的含义。

如果我们想在欧几里得几何中找到N个点的中点,则只需对所有x值取平均值,并对所有y值取平均值。这给了我们一个合理的“中点”,但是这个平均点通常并不等于所有三个点。给定三个点,我们可以计算出与这三个点等距的唯一点;这一点是由这三个点定义的三角形的外接心。但是,由于三个点定义了一个圆,因此此过程不会推广到n个点。给定4个或更多的点,则可能没有与所有4个等距的点。无论我们是使用Eculidean距离还是球面几何距离,这都是正确的。

在下图中,我们可以看到外接点距A,B和C点正好为5个单位。但是,该点实际上并不像“中间”。另一方面,由平均值定义的中点确实看起来像在中间,即使它更接近A而不是B或C。

对于由(纬度,经度)定义的n个点,最好的方法可能是将所有这些点转换为欧几里得点,对平均值进行计算机处理,然后再转换回(纬度,经度)。
可以在此处找到一些进行此转换的代码:Processing Forum
有一个很好的wikipedia page解释了您需要了解的背景数学。

10-02 10:23