/// <summary>
        /// Set data from XML fragment
        /// </summary>
        /// <param name="pmdata">Placemark XML fragment</param>
        /// <param name="ns">XML namespace</param>
        public void SetData(XmlNode pmdata, XmlNamespaceManager ns)
        {
            Nodes = new List <IKmlItem>();

            XmlNodeList points = pmdata.SelectNodes("gx:Track/gx:coord", ns);

            foreach (XmlNode point in points)
            {
                Placemark node   = new Placemark();
                string    triple = point.InnerText.Trim().Replace(' ', ',');
                node.SetCoord(triple);
                Nodes.Add(node);
            }
        }
示例#2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="Filename">.kml or .kmz file</param>
        public KmlLib(string Filename)
        {
            Stream      kmlStream = null;
            XmlDocument Kml;

            // if .kmz unpack the file
            if (System.IO.Path.GetExtension(Filename).ToUpper() == ".KMZ")
            {
                FileStream kmzFile = File.OpenRead(Filename);
                ZipFile    zip     = new ZipFile(kmzFile);

                foreach (ZipEntry zipEntry in zip)
                {
                    if (!zipEntry.IsFile)
                    {
                        continue;           // Ignore directories
                    }

                    if (zipEntry.Name.ToUpper() != "DOC.KML")
                    {
                        continue;
                    }

                    kmlStream = zip.GetInputStream(zipEntry);
                    break;
                }
            }
            else
            {
                kmlStream = File.OpenRead(Filename);
            }

            Kml = new XmlDocument();
            Kml.Load(kmlStream);

            // XML parser
            XmlNamespaceManager ns = new XmlNamespaceManager(Kml.NameTable);

            ns.AddNamespace("ns", "http://www.opengis.net/kml/2.2");
            ns.AddNamespace("kml", "http://www.opengis.net/kml/2.2");
            ns.AddNamespace("gx", "http://www.google.com/kml/ext/2.2");
            ns.AddNamespace("atom", "http://www.w3.org/2005/Atom");
            XmlNodeList pmList = Kml.GetElementsByTagName("Placemark");

            PmList    = new List <IKmlItem>();
            PathList  = new List <IKmlItem>();
            PolyList  = new List <IKmlItem>();
            TrackList = new List <IKmlItem>();

            foreach (XmlNode nodo in pmList)
            {
                if (nodo.SelectSingleNode("ns:Point", ns) != null)
                {
                    Placemark pm = new Placemark();
                    pm.SetData(nodo, ns);
                    PmList.Add(pm);
                }
                if (nodo.SelectSingleNode("ns:LineString", ns) != null)
                {
                    Path pa = new Path();
                    pa.SetData(nodo, ns);
                    PathList.Add(pa);
                }
                if (nodo.SelectSingleNode("ns:Polygon", ns) != null)
                {
                    Polygon po = new Polygon();
                    po.SetData(nodo, ns);
                    PolyList.Add(po);
                }
                if (nodo.SelectSingleNode("gx:Track", ns) != null)
                {
                    Track tr = new Track();
                    tr.SetData(nodo, ns);
                    TrackList.Add(tr);
                }
            }
        }