计算c#中2个点之间的距离

时间:2014-03-27 11:25:13

标签: c# latitude-longitude

我试图找出一种计算c#中2点之间距离的方法。

这是我一直在尝试的代码,但我担心得到的答案不正确。

static void Main()
    {
        //postcode australia 2600 -> 3000
        float latA = -31.997976f;
        float longA = 115.762877f;
        float latB = -31.99212f;
        float longB = 115.763228f;
        decimal distance = (DistanceBetween(latA, latB, longA, longB));
        Console.WriteLine("Distance is" + distance);
        Console.ReadLine();
    }

    static decimal DistanceBetween(float latA, float longA, float latB, float longB)
    {
        var RadianLatA = Math.PI * latA / 180;
        var RadianLatb = Math.PI * latB / 180;
        var RadianLongA = Math.PI * longA / 180;
        var RadianLongB = Math.PI * longB / 180;

        double theDistance = (Math.Sin(RadianLatA)) *
                Math.Sin(RadianLatb) +
                Math.Cos(RadianLatA) *
                Math.Cos(RadianLatb) *
                Math.Cos(RadianLongA - RadianLongB);

        return Convert.ToDecimal(((Math.Acos(theDistance) * (180.0 / Math.PI)))) * 69.09M * 1.6093M;
    }

这是根据此网站上的回复改编的 Distance between addresses

对出现问题的任何想法/

由于 莱恩

4 个答案:

答案 0 :(得分:12)

我通常使用的课程是GeoCoordinate

double latA = -31.997976f;
double longA = 115.762877f;
double latB = -31.99212f;
double longB = 115.763228f;

var locA = new GeoCoordinate(latA, longA);
var locB = new GeoCoordinate(latB, longB);
double distance = locA.GetDistanceTo(locB ); // metres

答案 1 :(得分:4)

double lat1 = {};
double lat2 = {};
double lon1 = {};
double lon2 = {};

var R = 6376.5000; //Km
lat1 = lat1.ToRad();
lat2 = lat2.ToRad();
lon1 = lon1.ToRad();
lon2 = lon2.ToRad();
var dLat = lat2 - lat1;
var dLon = lon2 - lon1;
var a = Math.Pow(Math.Sin(dLat / 2), 2) + (Math.Pow(Math.Sin(dLon / 2), 2) * Math.Cos(lat1) * Math.Cos(lat2));
var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
var distance = R * c;

public double ToRad(this double degs) {
    return degs * (Math.PI/180.0);
}

输入需要双倍。

这是半正式公式,它用于计算两点之间地球上的距离。这是直线上的距离,如果您需要路径上的距离,则必须找到该路径上的所有点,然后计算每两个点之间的距离,然后取总和。

答案 2 :(得分:2)

您可以使用DbGeography进行空间计算。它有DbGeography.Distance方法,用于计算两个gps点之间的距离。

否则,请尝试Ref: Harversine Formula计算两点之间的距离。

答案 3 :(得分:-4)

距离公式:给定两点(x1,y1)和(x2,y2),这些点之间的距离由公式给出:

enter image description here

相应地使用它