2017-01-14 122 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