Exemplo n.º 1
0
            public PointGeo ToSpherical()
            {
                PointGeo result = new PointGeo();

                result.Latitude  = Calculations.ToDegrees(Math.PI / 2 - Math.Acos(Z));
                result.Longitude = Calculations.ToDegrees(Math.Atan2(Y, X));
                return(result);
            }
Exemplo n.º 2
0
        /// <summary>
        /// Translates point in the specific direction by specific distance
        /// </summary>
        /// <param name="point">The point to be translated</param>
        /// <param name="bearing">Bearing from the original point</param>
        /// <param name="distance">Distance from the original point</param>
        /// <returns>the translated point</returns>
        public static PointGeo ProjectPoint(IPointGeo point, double bearing, double distance)
        {
            double lat = Math.Asin(Math.Sin(Calculations.ToRadians(point.Latitude)) * Math.Cos(distance / Calculations.EarthRadius) +
                                   Math.Cos(Calculations.ToRadians(point.Latitude)) * Math.Sin(distance / Calculations.EarthRadius) * Math.Cos(Calculations.ToRadians(bearing)));

            double lon = Calculations.ToRadians(point.Longitude) +
                         Math.Atan2(Math.Sin(Calculations.ToRadians(bearing)) * Math.Sin(distance / Calculations.EarthRadius) * Math.Cos(Calculations.ToRadians(point.Latitude)),
                                    Math.Cos(distance / Calculations.EarthRadius) - Math.Sin(Calculations.ToRadians(point.Latitude)) * Math.Sin(lat));

            return(new PointGeo(Calculations.ToDegrees(lat), Calculations.ToDegrees(lon)));
        }
Exemplo n.º 3
0
        public static double GetBearing(IPointGeo pt1, IPointGeo pt2)
        {
            double dLon = Calculations.ToRadians(pt1.Longitude - pt2.Longitude);
            double dLat = Calculations.ToRadians(pt1.Latitude - pt2.Latitude);

            double y = Math.Sin(dLon) * Math.Cos(Calculations.ToRadians(pt2.Latitude));
            double x = Math.Cos(Calculations.ToRadians(pt1.Latitude)) * Math.Sin(Calculations.ToRadians(pt2.Latitude)) -
                       Math.Sin(Calculations.ToRadians(pt1.Latitude)) * Math.Cos(Calculations.ToRadians(pt2.Latitude)) * Math.Cos(dLon);

            return(Calculations.ToDegrees(Math.Atan2(y, x)));
        }