public static List<WayPoint> initGPXFiles(IEnumerable<FileInfo> files) { List<WayPoint> list = new List<WayPoint>(); // read gpx files in foreach (FileInfo fi in files) { var doc = new XPathDocument(fi.FullName); XPathNavigator navi = doc.CreateNavigator(); var xman = new XmlNamespaceManager(navi.NameTable); xman.AddNamespace("g", "http://www.topografix.com/GPX/1/1"); XPathNodeIterator nodes = navi.Select("/g:gpx/g:wpt", xman); while (nodes.MoveNext()) { var wp = new WayPoint(); wp.Latitude = Convert.ToDouble(nodes.Current.GetAttribute("lat", string.Empty)); wp.Longitude = Convert.ToDouble(nodes.Current.GetAttribute("lon", string.Empty)); XPathNavigator eleNode = nodes.Current.SelectSingleNode("g:ele", xman); if (eleNode != null) { wp.Elevation = eleNode.ValueAsDouble; } XPathNavigator timeNode = nodes.Current.SelectSingleNode("g:time", xman); if (timeNode != null) { wp.Time = timeNode.ValueAsDateTime; } list.Add(wp); } } list.Sort((a, b) => a.Time.CompareTo(b.Time)); return list; }
public static void WriteGPSDateIntoImage(FileInfo fin, FileInfo fout, WayPoint wp) { BogenMass lon = Utils.ConvertToBogenMass(wp.Longitude); BogenMass lat = Utils.ConvertToBogenMass(wp.Latitude); WriteLongLat(fin.FullName, fout != null ? fout.FullName : string.Empty, lat.Grad, lat.Minuten, lat.Sekunden, lon.Grad, lon.Minuten, lon.Sekunden, !lon.Plus, lat.Plus); }