private static double Radians(double x) { return x * Math.PI / 180d; } public static DistanceContainer DistanceBetweenPlaces(decimal lat1, decimal lon1, decimal lat2, decimal lon2) { return DistanceBetweenPlaces((double)lat1, (double)lon1, (double)lat2, (double)lon2); } public static DistanceContainer DistanceBetweenPlaces(double lat1, double lon1, double lat2, double lon2) { double dlat = Radians(lat2 - lat1); double dlon = Radians(lon2 - lon1); lat1 = Radians(lat1); lat2 = Radians(lat2); var a = Math.Sin(dlat / 2d) * Math.Sin(dlat / 2d) + Math.Sin(dlon / 2d) * Math.Sin(dlon / 2d) * Math.Cos(lat1) * Math.Cos(lat2); var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1d - a)); return new DistanceContainer(c); }
Comments
Post a Comment