示例#1
0
 public DayAndNightViewModel(MapControl map)
 {
     this.map = map;
     InitializeTimer();
     Map.Layers[0].Loaded   += DayAndNightViewModel_Loaded;
     IsSteady                = true;
     SunPosition             = new GeoPoint();
     MoonPosition            = new GeoPoint();
     DayAndNightLineVertices = new CoordPointCollection();
     ActualDateTime          = DateTime.UtcNow;
 }
示例#2
0
        CoordPointCollection GetdayAndNightLineVertices(GeoPoint sunLocation, double step)
        {
            CoordPointCollection result    = new CoordPointCollection();
            IList <double>       latitudes = DayAndNightLineCalculator.GetDayAndNightLineLatitudes(sunLocation.Latitude, sunLocation.Longitude, step);
            double lon = -180;

            foreach (double lat in latitudes)
            {
                result.Add(new GeoPoint(lat, lon));
                lon += step;
            }
            return(result);
        }
        public CoordPointCollection GetAirPath()
        {
            CoordPointCollection result = new CoordPointCollection();

            foreach (TrajectoryPart trajectoryPart in trajectory)
            {
                result.Add(trajectoryPart.StartPoint);
            }
            if (trajectory.Count > 0)
            {
                result.Add(trajectory[trajectory.Count - 1].EndPoint);
            }
            return(result);
        }
示例#4
0
        void AddSouthContour(CoordPointCollection dayAndNightLineVertices)
        {
            double initLat = Math.Ceiling(((GeoPoint)dayAndNightLineVertices[dayAndNightLineVertices.Count - 1]).Latitude);

            for (double lat = initLat; lat >= -90.0; lat--)
            {
                dayAndNightLineVertices.Add(new GeoPoint(lat, 180));
            }
            for (double lon = 180; lon >= -180; lon--)
            {
                dayAndNightLineVertices.Add(new GeoPoint(-90, lon));
            }
            initLat = Math.Ceiling(((GeoPoint)dayAndNightLineVertices[0]).Latitude);
            for (double lat = -90; lat <= initLat; lat++)
            {
                dayAndNightLineVertices.Add(new GeoPoint(lat, -180));
            }
        }
示例#5
0
        void AddNorthContour(CoordPointCollection dayAndNightLineVertices)
        {
            double initLat = Math.Ceiling(((GeoPoint)dayAndNightLineVertices[dayAndNightLineVertices.Count - 1]).Latitude);

            for (double latForward = initLat; latForward <= 90.0; latForward++)
            {
                dayAndNightLineVertices.Add(new GeoPoint(latForward, 180));
            }
            for (double lon = 180; lon >= -180; lon--)
            {
                dayAndNightLineVertices.Add(new GeoPoint(90, lon));
            }
            initLat = Math.Ceiling(((GeoPoint)dayAndNightLineVertices[0]).Latitude);
            for (double latBackward = 90; latBackward >= initLat; latBackward--)
            {
                dayAndNightLineVertices.Add(new GeoPoint(latBackward, -180));
            }
        }
示例#6
0
        void UpdateDayAndNightLine()
        {
            double[]             sun3DPosition           = DayAndNightLineCalculator.CalculateSunPosition(ActualDateTime);
            GeoPoint             sunPosition             = new GeoPoint(sun3DPosition[1], sun3DPosition[0]);
            GeoPoint             moonPosition            = GetOppositePoint(sunPosition);
            CoordPointCollection dayAndNightLineVertices = GetdayAndNightLineVertices(sunPosition, 0.1);
            bool isNorthNight = DayAndNightLineCalculator.CalculateIsNorthNight(sun3DPosition);

            if (isNorthNight)
            {
                AddNorthContour(dayAndNightLineVertices);
            }
            else
            {
                AddSouthContour(dayAndNightLineVertices);
            }
            SunPosition             = sunPosition;
            MoonPosition            = moonPosition;
            DayAndNightLineVertices = dayAndNightLineVertices;
        }