/// <summary> /// Calculates geo-spatial distance between two locations. /// </summary> /// <param name="lat1"> /// The initial location latitude degrees. /// </param> /// <param name="lon1"> /// The initial location longitude degrees. /// </param> /// <param name="lat2"> /// The target location latitude degrees. /// </param> /// <param name="lon2"> /// The target location longitude degrees. /// </param> /// <param name="unit"> /// The desired distance measurement unit. /// </param> public static double GetDistance( double lat1, double lon1, double lat2, double lon2, GeoSpatialDistanceUnit unit = GeoSpatialDistanceUnit.NauticalMile) { double theta = lon1 - lon2; double dist = Math.Sin(DegreesToRadians(lat1)) * Math.Sin(DegreesToRadians(lat2)) + Math.Cos(DegreesToRadians(lat1)) * Math.Cos(DegreesToRadians(lat2)) * Math.Cos(DegreesToRadians(theta)); dist = Math.Acos(dist); dist = RadiansToDegrees(dist); dist = dist * Constants.MinutesInDegree * Constants.StatuteMilesInNauticalMile; if (unit == GeoSpatialDistanceUnit.Kilometer) { dist = dist * Constants.KilometersInMile; } else if (unit == GeoSpatialDistanceUnit.NauticalMile) { dist = dist * Constants.NauticalMilesInMile; } return(dist); }
/// <summary> /// Calculates geo-spatial distance between two locations. /// </summary> /// <param name="p1">The first point.</param> /// <param name="p2">The second point.</param> /// <param name="unit"> /// The desired distance measurement unit. /// </param> public static double GetDistance( GeoSpatialPoint p1, GeoSpatialPoint p2, GeoSpatialDistanceUnit unit = GeoSpatialDistanceUnit.NauticalMile) { return(GetDistance( p1.Latitude, p1.Longitude, p2.Latitude, p2.Longitude, unit)); }