示例#1
0
文件: Topology.cs 项目: wsgan001/TPM
            public Vector3(IPointGeo sphericalPoint)
            {
                double lat = Math.PI / 2 - Calculations.ToRadians(sphericalPoint.Latitude);
                double lon = Calculations.ToRadians(sphericalPoint.Longitude);

                X = Math.Sin(lat) * Math.Cos(lon);
                Y = Math.Sin(lat) * Math.Sin(lon);
                Z = Math.Cos(lat);
            }
示例#2
0
文件: Topology.cs 项目: wsgan001/TPM
        /// <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)));
        }
示例#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)));
        }