Example #1
0
        public static double DegreeBearing(double lat1, double lon1, double lat2, double lon2)
        {
            double y = GeoClass.ToRad(lon2 - lon1);
            double x = Math.Log(Math.Tan(GeoClass.ToRad(lat2) / 2.0 + Math.PI / 4.0) / Math.Tan(GeoClass.ToRad(lat1) / 2.0 + Math.PI / 4.0));

            if (Math.Abs(y) > Math.PI)
            {
                y = y > 0.0 ? -(2.0 * Math.PI - y) : 2.0 * Math.PI + y;
            }
            return(GeoClass.ToBearing(Math.Atan2(y, x)));
        }
Example #2
0
        public static double Dist(double lat1, double lon1, double lat2, double lon2)
        {
            int    num1 = 6371;
            double rad1 = GeoClass.ToRad(lat1);
            double rad2 = GeoClass.ToRad(lat2);
            double num2 = rad2 - rad1;
            double rad3 = GeoClass.ToRad(lon2 - lon1);
            double num3 = 2.0;
            double d    = Math.Pow(Math.Sin(num2 / num3), 2.0) + Math.Pow(Math.Sin(rad3 / 2.0), 2.0) * Math.Cos(rad1) * Math.Cos(rad2);
            double num4 = 2.0 * Math.Atan2(Math.Sqrt(d), Math.Sqrt(1.0 - d));

            return((double)num1 * num4);
        }
Example #3
0
        public static GeoClass.Coord PointAtDistance(GeoClass.Coord startPoint, double initialBearingRadians, double distanceKilometres)
        {
            double num1    = distanceKilometres / 6371.01;
            double num2    = Math.Sin(num1);
            double num3    = Math.Cos(num1);
            double rad1    = GeoClass.ToRad(startPoint.lat);
            double rad2    = GeoClass.ToRad(startPoint.lon);
            double num4    = Math.Cos(rad1);
            double num5    = Math.Sin(rad1);
            double num6    = Math.Asin(num5 * num3 + num4 * num2 * Math.Cos(initialBearingRadians));
            double radians = rad2 + Math.Atan2(Math.Sin(initialBearingRadians) * num2 * num4, num3 - num5 * Math.Sin(num6));

            return(new GeoClass.Coord()
            {
                lat = GeoClass.ToDeg(num6),
                lon = GeoClass.ToDeg(radians)
            });
        }