private void gpx_save_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "GPX file|*.gpx"; saveFileDialog1.Title = "Save To GPX File"; saveFileDialog1.ShowDialog(); // If the file name is not an empty string open it for saving. if (saveFileDialog1.FileName != "") { GpxClass track = new GpxClass(); wptTypeCollection trkpt = new wptTypeCollection(); foreach (Location lc in gpx_locations) { wptType wpt = new wptType(); wpt.lat = (decimal)lc.Latitude; wpt.lon = (decimal)lc.Longitude; wpt.ele = (decimal)lc.Altitude; wpt.eleSpecified = true; trkpt.Add(wpt); } trksegType trk_seg = new trksegType(); trk_seg.trkpt = trkpt; trksegTypeCollection trk_seg_cl = new trksegTypeCollection(); trk_seg_cl.Addtrkseg(trk_seg); trkType trk = new trkType(); trk.name = DateTime.Now.ToString("MM/dd/yyyy h:mm tt"); trk.trkseg = trk_seg_cl; track.trk = new trkTypeCollection(); track.trk.Add(trk); track.ToFile(saveFileDialog1.FileName); System.Windows.Forms.MessageBox.Show("GPX file is saved!"); // back to the teleport mode. cur_click_mode = e_click_mode.teleport; gpx_create_button.Content = "Create GPX"; way_points.Text = ""; gpx_locations.Clear(); myMap.Children.Clear(); gpx_save_button.IsEnabled = false; } }
static void Main() { try { // read a file GpxClass gpx = GpxClass.FromFile("Files\\All Buntzen Trails.gpx"); gpx.rte.ForEach(x => Console.WriteLine("Route: {0}\r\n", x.name)); gpx.wpt.ForEach(x => Console.WriteLine("Waypoint: {0}\r\n", x.name)); gpx.trk.ForEach(x => Console.WriteLine("Track: {0}\r\n", x.name)); // create a new file GpxClass newGpx = new GpxClass() { creator = WindowsIdentity.GetCurrent().Name, version = "Test", wpt = new wptTypeCollection(), }; wptType waypoint = new wptType() { name = "Test Waypoint", cmt = "Comment", desc = "Description", lat = (Decimal)49.3402360, lon = (Decimal)(-122.8770030), time = DateTime.Now, timeSpecified = true, sym = "Waypoint", }; newGpx.wpt.Add(waypoint); newGpx.ToFile("Test.gpx"); CreateTrack(); } catch (Exception ex) { Console.WriteLine("Error processing file:\r\n{0}", ex); } }
private static void CreateTrack() { GpxClass track = new GpxClass() { metadata = new metadataType() { author = new personType() { name = WindowsIdentity.GetCurrent().Name }, link = new linkTypeCollection().AddLink(new linkType() { href = "www.BlueToque.ca", text = "Blue Toque Software" }) }, trk = new trkTypeCollection() }; track.trk.Add(new trkType() { name = "11-AUG-11 18:18:27", trkseg = new trksegTypeCollection().Addtrkseg( new trksegType() { trkpt = new wptTypeCollection() .Addwpt(new wptType() { lat = (Decimal)49.706482, lon = (Decimal)(-123.111961), ele = (Decimal)38.11, eleSpecified = true, }) .Addwpt(new wptType() { lat = (Decimal)49.706417, lon = (Decimal)(-123.112190), ele = (Decimal)38.11, eleSpecified = true, }) .Addwpt(new wptType() { lat = (Decimal)49.706348, lon = (Decimal)(-123.112495), ele = (Decimal)76.08, eleSpecified = true, }) .Addwpt(new wptType() { lat = (Decimal)49.706242, lon = (Decimal)(-123.111961), ele = (Decimal)74.16, eleSpecified = true, }) .Addwpt(new wptType() { lat = (Decimal)49.705872, lon = (Decimal)(-123.111961), ele = (Decimal)38.11, eleSpecified = true, }) }) }); track.ToFile("Test2.gpx"); }
static void Main(string[] args) { Logger logger = LogManager.GetCurrentClassLogger(); Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { if (!Directory.Exists(o.InputFolder)) { logger.Error("Input folder does not exist... skipping"); return; } if (!Directory.Exists(o.Destination)) { logger.Info("output folder does not exist, creating"); Directory.CreateDirectory(o.Destination); } string[] gpsFiles = Directory.GetFiles(o.InputFolder, "*.gps", SearchOption.AllDirectories); logger.Info($"found {gpsFiles.Length} files"); DateTime maxSpeedDate = new DateTime(); DateTime currentDate = new DateTime(); DateTime lastDate = new DateTime(); bool dateSet = false; long maxSpeedKnots = 0; double longitude = 0; double latitude = 0; double alt = 0; bool latSet = false; bool longSet = false; bool altSet = false; int dayCount = 0; wptTypeCollection coll = new wptTypeCollection(); string gpxFileLocation = string.Empty; GpxClass track = new GpxClass(); List <wptType> waypoints = new List <wptType>(); for (int i = 0; i < gpsFiles.Length; i++) { string f = gpsFiles[i]; logger.Info($"Parsing {f}"); string[] lines = File.ReadAllLines(f); logger.Debug($"found {lines.Length} in {f}"); foreach (var readLine in lines) { DateTime internalDate = new DateTime(); string message = ""; if (readLine.StartsWith("[")) { long epoc = Convert.ToInt64(readLine.Split('[', ']')[1]); message = Regex.Replace(readLine, "\\[.*?\\]", ""); internalDate = UnixEPOCtoDateTime((double)epoc); if (currentDate.Date != internalDate.Date) { logger.Debug($"Date Change. old Date {currentDate} new Date {internalDate}"); currentDate = new DateTime(internalDate.Year, internalDate.Month, internalDate.Day); } if (!dateSet) { lastDate = currentDate; dateSet = true; } } if (message.StartsWith("$GPRMC") || message.StartsWith("$GNRMC")) //recomended minimum data for GPS { try { Rmc rmc = (Rmc)NmeaMessage.Parse(message); latitude = rmc.Latitude; longitude = rmc.Longitude; if ((double)maxSpeedKnots < rmc.Speed) { maxSpeedKnots = (long)rmc.Speed; maxSpeedDate = internalDate; } } catch (Exception ex) { logger.Warn($"GPRMC: {ex.Message}"); } } else if (message.StartsWith("$GPVTG") || message.StartsWith("$GNVTG")) // vector track and speed over ground { try { Vtg vtg = (Vtg)NmeaMessage.Parse(message); if ((double)maxSpeedKnots < vtg.SpeedKnots) { maxSpeedKnots = (long)vtg.SpeedKnots; maxSpeedDate = internalDate; } } catch (Exception ex) { logger.Warn($"$GPVTG: {ex.Message}"); } } else if (message.StartsWith("$GPGGA") || message.StartsWith("$GNGGA")) // fix information { try { Gga gga = (Gga)NmeaMessage.Parse(message); alt = gga.Altitude; longitude = gga.Longitude; latitude = gga.Latitude; latSet = true; longSet = true; altSet = true; } catch (Exception ex) { logger.Warn("GPGGA:" + ex.Message); } } else if (message.StartsWith("$GPGSA") || message.StartsWith("$GNGSA")) //overall satelite data { try { Gsa gsa = (Gsa)NmeaMessage.Parse(message); } catch (Exception ex) { logger.Warn("GPGSA:" + ex.Message); } } else if (message.StartsWith("$GPGSV") || message.StartsWith("$GNGSV")) { try { Gsv gsv = (Gsv)NmeaMessage.Parse(message); } catch (Exception ex) { logger.Warn("GPGSV:" + ex.Message); } } else if (message.StartsWith("$GPGLL") || message.StartsWith("$GNGLL")) { try { Gll gll = (Gll)NmeaMessage.Parse(message); longitude = gll.Longitude; latitude = gll.Latitude; latSet = true; longSet = true; } catch (Exception ex) { logger.Warn("GPGLL:" + ex.Message); } } if (latSet && longSet && altSet && CheckDouble(longitude) && CheckDouble(latitude) && CheckDouble(alt)) { waypoints.Add(new wptType(latitude, longitude, alt, internalDate)); latSet = false; longSet = false; altSet = false; if (lastDate.Date != currentDate.Date) { coll = new wptTypeCollection(); coll.AddRange(waypoints); track = new GpxClass(); track.Tracks.Add(new trkType() { name = currentDate.ToString(), trkseg = new trksegTypeCollection().AddItem( new trksegType() { trkpt = coll }) }); gpxFileLocation = Path.Combine(o.Destination, $"{lastDate.Date.ToString("yyyyMMdd")}.gpx"); track.ToFile(gpxFileLocation); waypoints = new List <wptType>(); dayCount++; lastDate = currentDate.Date; } } } } coll = new wptTypeCollection(); coll.AddRange(waypoints); track = new GpxClass(); track.Tracks.Add(new trkType() { name = currentDate.ToString(), trkseg = new trksegTypeCollection().AddItem( new trksegType() { trkpt = coll }) }); gpxFileLocation = Path.Combine(o.Destination, $"{lastDate.Date.ToString("yyyyMMdd")}.gpx"); track.ToFile(gpxFileLocation); Console.WriteLine($"Max speed: {maxSpeedKnots * 1.852}KM/h at {maxSpeedDate}"); }); }