/// <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)); }
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)); } } }
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" ); }
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"; }
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)); }
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) }; }
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(""); }
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; } }