2012-12-20 43 views
4

在我的应用程序中,我需要找到一些数字(3个或更多)GPS点的中点。如何找到一些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的中点点

请帮我出这两个点之间的距离。

回答

5

欧几里德距离中两点的中点只是x和y坐标的平均值。如果我们只是平均点A和B的纬度和经度,这给了我们A和B之间的点,但它不需要是等距的。

你可能想要的是将球面坐标转换为欧几里德坐标,通过平均x和y找到中点,然后转换回纬度,经度。

如果我们用超过2点的方法做到这一点,我们需要弄清楚“中点”是什么意思。

如果我们希望找到欧几里得几何中的N个点的中点,我们只需对所有的x值进行平均,然后平均所有的y值。这给了我们一个合理的“中间”,但这个平均点通常不等于所有三点。给定三点,我们可以计算出与这三点等距的独特点;这一点是三点定义的三角形的外心。但是由于三个点定义了一个圆,所以这个过程不会推广到n个点。给定4个或更多点,可能没有与所有4等距的点。无论我们是使用eculidean距离还是球形几何距离,这都是事实。

在下图中,我们可以看到外心点距离A点,B点和C点仅有5个单位。然而,这一点并不像“中间”那样。通过平均确定的中点,在另一方面,看起来像它在即使它是比B或C.

Midpoint of three points

对于由定义n个点更靠近中间(lattitude,经度) ,最好的方法可能是将所有这些点转换为欧几里德点,计算机的平均值,然后转换回(经度,纬度)。 做这种转换的一些代码可以在这里找到:Processing Forum 而且还有一个很好的wikipedia page解释你需要了解的背景数学。

+0

我知道如何找到中点时,只有2个GPS点。我的意思是说,当有更多的时候2. @Thorn –

+0

@ user1874744请看我更新的答案。 – Thorn

+0

所以这意味着没有办法找到与n点等距的点 – Amerrnath