/// <summary> /// Take coordonate as XX XX XX C and create GeoDMS /// </summary> /// <param name="coordonate"></param> /// <returns></returns> private GeoDMS GeoCoordonateHelper(string coordonate) { var values = coordonate.Split(" "); var geo = new GeoDMS { Degree = double.Parse(values[0]), Minute = double.Parse(values[1]), Second = double.Parse(values[2]), Cardinal = Enum.Parse <CardinalEnum>(values[3]) }; return(geo); }
/// <summary> /// Compute distance between two points localized by latitude/longitude /// </summary> /// <param name="sourceLatitude"></param> /// <param name="sourceLongitude"></param> /// <param name="destinationLatitude"></param> /// <param name="destinationLongitude"></param> /// <returns>Distance in kilometer</returns> public double GetDistance(GeoDMS sourceLatitude, GeoDMS sourceLongitude, GeoDMS destinationLatitude, GeoDMS destinationLongitude) { var radiansOverDegrees = (Math.PI / 180.0); var sLatitudeRadians = sourceLatitude.CoordinateAsDouble * radiansOverDegrees; var sLongitudeRadians = sourceLongitude.CoordinateAsDouble * radiansOverDegrees; var eLatitudeRadians = destinationLatitude.CoordinateAsDouble * radiansOverDegrees; var eLongitudeRadians = destinationLongitude.CoordinateAsDouble * radiansOverDegrees; var dLongitude = eLongitudeRadians - sLongitudeRadians; var dLatitude = eLatitudeRadians - sLatitudeRadians; var result = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) * Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); // Using 6371 as the number of kilometer around the earth var distanceInKilometer = 6371.0 * 2.0 * Math.Atan2(Math.Sqrt(result), Math.Sqrt(1.0 - result)); return(Math.Round(distanceInKilometer, 0)); }