2017-01-14 3 views
0

Ich bin in der Lage, den Abstand zwischen zwei Punkten (Breite und Longtitude) zu berechnen, indem die unten Funktionrekursive Art und Weise Abstand zwischen Koordinaten zu berechnen

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 ; 
} 

dies funktioniert wie unter

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

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

nun sage ich habe eine Sammlung von Latitudes und Longtitudes wie unter

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

wie die Gesamt dista berechnen nce?

Jeder rekursive Weg oder ???

Vielen Dank im Voraus

Antwort

1

Rekursion zu verwenden versucht, wird dieses Problem nur erschweren. Eine einfache alte Iteration ist mehr als ausreichend.

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]); 
} 

Wenn Sie unbedingt eine rekursive Methode verwenden muss, sollte dies den Trick:

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

nett ... nur von i arrLatLong.Length <ändern - 1 bis arrLatLong.GetUpperBound (0) für den iterativen Ansatz. –

+0

@ priyanka.sarkar Ich würde 'GetLength (0)' selbst bevorzugen, aber ja. – Abion47

Verwandte Themen