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; }
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); }
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)); } }
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)); } }
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; }