计算坐标间距离的递归方法

时间:2017-01-14 03:50:52

标签: c# recursion c#-4.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},
             };

如何计算总距离?有任何递归方式吗?

1 个答案:

答案 0 :(得分: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;
}