get distance between two coordinates c# code example

Example 1: distance between two points latitude longitude c#

float DeltaFi = (float)ConvertToRadians(lat2 - lat1);
float DeltaLambda = (float)ConvertToRadians(lon2 - lon1);
float a = Mathf.Sin(DeltaFi / 2) * Mathf.Sin(DeltaFi / 2) + Mathf.Cos(fi1) * Mathf.Cos(fi2) * Mathf.Sin(DeltaLambda / 2) * Mathf.Sin(DeltaLambda / 2);
float c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1 - a));
float distance = earthD * c;

Example 2: calculate distance using latitude and longitude c#

public class Coordinates
{
    public double Latitude { get; private set; }
    public double Longitude { get; private set; }

    public Coordinates(double latitude, double longitude)
    {
        Latitude = latitude;
        Longitude = longitude;
    }
}
public static class CoordinatesDistanceExtensions
{
    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates)
    {
        return DistanceTo(baseCoordinates, targetCoordinates, UnitOfLength.Kilometers);
    }

    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates, UnitOfLength unitOfLength)
    {
        var baseRad = Math.PI * baseCoordinates.Latitude / 180;
        var targetRad = Math.PI * targetCoordinates.Latitude/ 180;
        var theta = baseCoordinates.Longitude - targetCoordinates.Longitude;
        var thetaRad = Math.PI * theta / 180;

        double dist =
            Math.Sin(baseRad) * Math.Sin(targetRad) + Math.Cos(baseRad) *
            Math.Cos(targetRad) * Math.Cos(thetaRad);
        dist = Math.Acos(dist);

        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;

        return unitOfLength.ConvertFromMiles(dist);
    }
}

public class UnitOfLength
{
    public static UnitOfLength Kilometers = new UnitOfLength(1.609344);
    public static UnitOfLength NauticalMiles = new UnitOfLength(0.8684);
    public static UnitOfLength Miles = new UnitOfLength(1);

    private readonly double _fromMilesFactor;

    private UnitOfLength(double fromMilesFactor)
    {
        _fromMilesFactor = fromMilesFactor;
    }

    public double ConvertFromMiles(double input)
    {
        return input*_fromMilesFactor;
    }
}

Example 3: calculate distance using latitude and longitude c#

public static double DistanceTo(double lat1, double lon1, double lat2, double lon2, char unit = 'K')
{
    double rlat1 = Math.PI*lat1/180;
    double rlat2 = Math.PI*lat2/180;
    double theta = lon1 - lon2;
    double rtheta = Math.PI*theta/180;
    double dist =
        Math.Sin(rlat1)*Math.Sin(rlat2) + Math.Cos(rlat1)*
        Math.Cos(rlat2)*Math.Cos(rtheta);
    dist = Math.Acos(dist);
    dist = dist*180/Math.PI;
    dist = dist*60*1.1515;

    switch (unit)
    {
        case 'K': //Kilometers -> default
            return dist*1.609344;
        case 'N': //Nautical Miles 
            return dist*0.8684;
        case 'M': //Miles
            return dist;
    }

    return dist;
}