calculate distance in miles from latitude and longitude 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;
}
}