示例#1
0
        public static int Main(string[] args)
        {
            var parsedArgs = new ParsedArgs(args);

            if (parsedArgs.Ready)
            {
                Console.WriteLine(parsedArgs);

                using (XmlReader fileReader = XmlReader.Create(parsedArgs.InTrackFile)) {
                    XmlWriterSettings settings = new XmlWriterSettings();

                    settings.Indent                  = true;
                    settings.CloseOutput             = true;
                    settings.Encoding                = UTF8Encoding.UTF8;
                    settings.WriteEndDocumentOnClose = true;
                    settings.NamespaceHandling       = NamespaceHandling.OmitDuplicates;

                    using (XmlWriter fileWriter = XmlWriter.Create(parsedArgs.OutTrackFile, settings)) {
                        Statistics stats    = new Statistics();
                        GpxPoint   previous = null;

                        stats.Init();

                        ProcessMethodExtended dealPoint = (XmlReader entry, object extraData) => {
                            GpxPoint current = new GpxPoint(ProcessXml.ReadElement(entry), fileReader.NamespaceURI);

                            if (current.Hdop > parsedArgs.HdopLimit)
                            {
                                Console.WriteLine(current + ", hdop " + current.Hdop);
                            }
                            else
                            {
                                ProcessPoint(current, ref previous, ref stats);
                            }

                            current.Entry.WriteTo(extraData as XmlWriter);
                        };

                        var segment = new PartsRunner("trkseg", "trkpt", dealPoint);
                        var track   = new PartsRunner("trk", "trkseg", segment.Run);

                        fileWriter.WriteStartDocument();
                        fileReader.MoveToContent();
                        fileWriter.WriteStartElement("gpx", fileReader.NamespaceURI);
                        // xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
                        fileWriter.WriteAttributeString("version", "1.1");
                        ProcessXml.ProcessEntries(fileReader, "trk", track.Run, fileWriter);
                        fileWriter.WriteEndElement();
                        fileWriter.Close();
                        Console.WriteLine(stats);
                    }
                }
            }
            else
            {
                Console.WriteLine("Wrong arguments passed to the application.");
            }

            return(0);
        }
示例#2
0
        public void Run(XmlReader reader, object extraData)
        {
            XmlWriter writer = (extraData as XmlWriter);

            writer.WriteStartElement(_selfName);
            ProcessXml.ProcessEntries(reader, _checkData, _subMethod, writer);
            writer.WriteEndElement();
        }