2017-01-14 91 views
0

我能够通过使用下面的函数来计算两个点(纬度和经度)之间的距离计算坐标之间的距离递归的方式

public static double GetDistance(double lat1, double lng1, double lat2, double lng2) 
{ 
      double sLatitude = 48.672309; 
      double sLongitude = 15.695585; 
      double eLatitude = 48.237867; 
      double eLongitude = 16.389477; 

      var coordinate1 = new GeoCoordinate(lat1, lng1); 
      var coordinate2 = new GeoCoordinate(lat2, lng2); 

      var resultInMeter = coordinate1.GetDistanceTo(coordinate2); //in meters 

      //convert to KM : 1 meter = 0.001 KM 
      var resultInKM = resultInMeter * 0.001; //in KM's 

     return resultInKM ; 
} 

这种工作方式下

double lat1 = 48.672309; 
double lng1 = 15.695585; 
double lat2 = 48.237867; 
double lng2 = 16.389477; 

var distance = GetDistance(lat1,lng1,lat2,lng2); 

现在说我有一个纬度和经度的集合

double[,] arrLatLong = new double[,] 
      { 
       {22.57891304, 88.34285622}, 
       {22.54398196, 88.38221001}, 
       {22.58277011, 88.38303798}, 
       {22.59950095, 88.39352995}, 
       {22.59887647, 88.32905243}, 
      }; 

如何计算总dista nce?

任何递归方式或?

在此先感谢

回答

1

尝试使用递归只会使这个问题更加困难。简单的旧迭代已经足够了。

double dist = 0.0; 

for (int i = 0; i < arrLatLong.GetLength(0) - 1; i++) 
{ 
    dist += GetDistance(
       arrLatLong[i, 0], 
       arrLatLong[i, 1], 
       arrLatLong[i+1, 0], 
       arrLatLong[i+1, 1]); 
} 

如果你绝对必须使用递归方法,这应该做的伎俩:

double GetDistanceRecursive(double[,] coords, int idx) 
{ 
    if (idx + 1 >= coords.Length) 
     return 0.0; 

    double dist = GetDistance(
        coords[idx, 0], 
        coords[idx, 1], 
        coords[idx+1, 0], 
        coords[idx+1, 1]); 

    dist += GetDistanceRecursive(coords, idx + 1); 

    return dist; 
} 
+0

不错......只是改变从我

+0

@ priyanka.sarkar我更喜欢'GetLength(0)'我自己,但是。 – Abion47