Beispiel #1
0
        /// <summary>Creates an AXPoint from WGS84 lat/lon coordinates. Time is unknown and altitude is not barometric
        /// </summary>
        /// <param name="latitude"></param>
        /// <param name="longitude"></param>
        /// <param name="altitude"></param>
        /// <returns></returns>
        public AXPoint FromLatLonToAXPoint(double latitude, double longitude, double altitude)
        {
            var llc  = new LatLonCoordinates(Datum.GetInstance("WGS84"), latitude, longitude, altitude);
            var utmc = llc.ToUtm(Datum.GetInstance(DatumName), UtmZone);

            return(new AXPoint(Date.Date, utmc));
        }
Beispiel #2
0
        private void btnLoadTrack_Click(object sender, RoutedEventArgs e)
        {
            if (!map.IsMapLoaded)
            {
                MessageBox.Show(this, "You must load a map before loading a track");
            }
            else
            {
                var datum   = Datum.GetInstance("European 1950");
                var utmZone = "31T";

                var dlg = new OpenFileDialog();
                dlg.Filter           = "Track Files (*.igc, *.trk)|*.igc;*.trk|All Files (*.*)|*.*";
                dlg.InitialDirectory = Environment.CurrentDirectory;
                //dlg.RestoreDirectory = true;
                if (dlg.ShowDialog(this) == true)
                {
                    var logFile  = LoggerFile.Load(dlg.FileName, DateTime.Now - DateTime.UtcNow);
                    var trackLog = logFile.GetTrackLog();
                    var track    = new Point[trackLog.Length];
                    for (var i = 0; i < trackLog.Length; i++)
                    {
                        var p        = trackLog[i];
                        var tmpPoint = p.Coordinates.ToUtm(datum, utmZone);
                        track[i] = new Point(tmpPoint.Easting, tmpPoint.Northing);
                    }
                    map.AddOverlay(new TrackOverlay(track, 2));
                }
            }
        }
Beispiel #3
0
 public static string ToAxsPoint(this GeoWaypoint gwp, string datumName, string utmZone, AltitudeUnits units)
 {
     var utmCoords = gwp.Coordinates.ToUtm(Datum.GetInstance(datumName), utmZone);
     return string.Format(NumberFormatInfo.InvariantInfo, "point {0}=sutm({1:0.0},{2:0.0},{3:0.0}{4}) waypoint(lime)",
         gwp.Name,
         utmCoords.Easting, utmCoords.Northing,
         units == AltitudeUnits.Meters ? utmCoords.Altitude : utmCoords.Altitude * Physics.METERS2FEET,
         units == AltitudeUnits.Meters ? "m" : "ft"
         );
 }
Beispiel #4
0
        public WptTools()
        {
            InitializeComponent();
            Waypoints   = new ObservableCollection <GeoWaypoint>();
            DataContext = this;

            DatumName   = Datum.GetInstance("European 1950").ToString();
            UtmZone     = "31T";
            Competition = "0th World Hot Air Balloon Championship";
            Columns     = "3";
        }
Beispiel #5
0
        public AXWaypoint FromGeoToAXWaypoint(GeoWaypoint geoWaypoint, bool isBarometricAltitude)
        {
            var    utmCoords = geoWaypoint.Coordinates.ToUtm(Datum.GetInstance(DatumName), UtmZone);
            double altitude  = utmCoords.Altitude;

            if (isBarometricAltitude)
            {
                altitude = CorrectAltitudeQnh(utmCoords.Altitude);
            }

            return(new AXWaypoint(geoWaypoint.Name, geoWaypoint.Time, utmCoords.Easting, utmCoords.Northing, altitude));
        }
Beispiel #6
0
        public static PdfWaypoint ToPdfWaypoint(this GeoWaypoint gwp, string datumName, string utmZone, AltitudeUnits units)
        {
            var utmCoords = gwp.Coordinates.ToUtm(Datum.GetInstance(datumName), utmZone);
            var altitude = utmCoords.Altitude;
            var wp = new AXWaypoint(gwp.Name, gwp.Time, utmCoords.Easting, utmCoords.Northing, altitude);

            return new PdfWaypoint()
            {
                Name = wp.Name,
                CompetitionCoords = wp.ToString(AXPointInfo.CompetitionCoords8).Replace("/", " / "),
                Altitude = wp.ToString(units == AltitudeUnits.Meters ? AXPointInfo.AltitudeInMeters : AXPointInfo.AltitudeInFeet)
            };
        }
Beispiel #7
0
        private void buttonCoords_Click(object sender, RoutedEventArgs e)
        {
            var wgs84  = Datum.GetInstance("WGS84");
            var ed50   = Datum.GetInstance("European 1950");
            var osgb36 = Datum.GetInstance("OSGB36");

            Coordinates p1, p2, p3;


            Print("From latlon WGS84 to UTM ED50 and back");
            p1 = new LatLonCoordinates(wgs84, 41.973256, 2.780310, 87.0);
            p2 = p1.ToUtm(ed50);
            p3 = p2.ToLatLon(wgs84);
            Print(p1.ToString());
            Print(p2.ToString());
            Print(p3.ToString());
            Print("");

            Print("From UTM ED50 to UTM WGS84 and back");
            p1 = new UtmCoordinates(ed50, "31T", 365000, 4612000, 56);
            p2 = p1.ToUtm(wgs84);
            p3 = p2.ToUtm(ed50);
            Print(p1.ToString());
            Print(p2.ToString());
            Print(p3.ToString());
            Print("");

            Print("From UTM ED50 (default zone) to UTM ED50 (different zone) and back");
            p1 = new UtmCoordinates(ed50, "31T", 365000, 4612000, 56);
            p2 = p1.ToUtm(ed50, "30T");
            p3 = p2.ToUtm(ed50);
            Print(p1.ToString());
            Print(p2.ToString());
            Print(p3.ToString());
            Print("");
        }
Beispiel #8
0
        public override void CheckConstructorSyntax()
        {
            base.CheckConstructorSyntax();

            Definition.ObjectName = Definition.ObjectName.ToUpper();

            switch (Definition.ObjectName)
            {
            default:
                throw new ArgumentException("Unknown setting '" + Definition.ObjectName + "'");

            case "TITLE":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.Title = ParseOrDie <string>(0, Parsers.ParseString);
                break;

            case "SUBTITLE":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length >= 1);
                //subtitles usually contain commas. re-assemble the subtitles.
                var st = "";
                foreach (var s in Definition.ObjectParameters)
                {
                    if (!string.IsNullOrEmpty(st))
                    {
                        st += ", ";
                    }
                    st += s;
                }
                Engine.Settings.Subtitle = st;
                break;

            case "DATETIME":
            {
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 2);

                var date  = ParseOrDie <DateTime>(0, Parsers.ParseLocalDatetime);
                var am_pm = ParseOrDie <string>(1, s => s).ToUpper();

                var time = new TimeSpan(0, 0, 0);
                if (am_pm == "PM")
                {
                    time = new TimeSpan(12, 0, 0);
                }
                else if (am_pm != "AM")
                {
                    throw new ArgumentException(SyntaxErrorMessage);
                }

                Engine.Settings.Date = date + time;
            }
            break;

            case "UTCOFFSET":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.UtcOffset = ParseOrDie <TimeSpan>(0, Parsers.ParseTimeSpan);
                break;

            case "DATUM":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.DatumName = ParseOrDie <string>(0, s => s);
                Datum.GetInstance(Engine.Settings.DatumName);    //check datum validity
                break;

            case "UTMZONE":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.UtmZone = ParseOrDie <string>(0, s => s);
                break;

            case "TASKSINORDER":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.TasksInOrder = ParseOrDie <bool>(0, Parsers.ParseBoolean);
                break;

            case "CONTESTLANDING":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.ContestLanding = ParseOrDie <bool>(0, Parsers.ParseBoolean);
                break;

            case "QNH":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.Qnh = ParseOrDie <double>(0, Parsers.ParseDouble);
                break;

            case "ALTITUDEUNITS":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                var units = ParseOrDie <string>(0, Parsers.ParseString).ToLower();
                if (units == "meters")
                {
                    Engine.Settings.AltitudeUnits = AltitudeUnits.Meters;
                }
                else if (units == "feet")
                {
                    Engine.Settings.AltitudeUnits = AltitudeUnits.Feet;
                }
                else
                {
                    throw new ArgumentException("Unknown unit: ", units);
                }
                break;

            case "SMOOTHNESS":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.Smoothness = ParseOrDie <int>(0, int.Parse);
                break;

            case "MINSPEED":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.MinSpeed = ParseOrDie <double>(0, Parsers.ParseDouble);
                break;

            case "MAXACCELERATION":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                Engine.Settings.MaxAcceleration = ParseOrDie <double>(0, Parsers.ParseLength);
                break;

            case "LOGFILE":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                var listener = new TimeStampTraceListener(Definition.ObjectParameters[0]);
                Trace.Listeners.Add(listener);
                Trace.AutoFlush = true;
                break;

            case "ALTITUDECORRECTIONSFILE":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1);
                var fileName = ParseOrDie <string>(0, s => s);
                if (!File.Exists(fileName))
                {
                    throw new Exception("Logger altitude corrections file does not exist");
                }
                Engine.Settings.AltitudeCorrectionsFileName = fileName;
                break;

            case "INTERPOLATION":
                AssertNumberOfParametersOrDie(Definition.ObjectParameters.Length == 1 || Definition.ObjectParameters.Length == 2);
                Engine.Settings.InterpolationInterval = ParseOrDie <int>(0, Parsers.ParseInt);
                if (Definition.ObjectParameters.Length == 2)
                {
                    Engine.Settings.InterpolationMaxGap = ParseOrDie <int>(1, Parsers.ParseInt);
                }
                break;
            }
        }