public void UpdateTimeSpanRange(KmlTimeSpan span) { if (!span.UnBoundedBegin) { if (TimeSpan.BeginTime > span.BeginTime) { TimeSpan.BeginTime = span.BeginTime; TimeSpan.UnBoundedBegin = false; } if (TimeSpan.EndTime < span.BeginTime) { TimeSpan.EndTime = span.BeginTime; TimeSpan.UnBoundedEnd = false; } } if (!span.UnBoundedEnd) { if (TimeSpan.EndTime < span.EndTime) { TimeSpan.EndTime = span.EndTime; TimeSpan.UnBoundedEnd = false; } if (TimeSpan.BeginTime > span.EndTime) { TimeSpan.BeginTime = span.EndTime; TimeSpan.UnBoundedBegin = false; } } }
// todo Define remainder of vars public override void LoadDetails(XmlNode node, KmlRoot owner) { if (node["name"] != null) { Name = node["name"].InnerText; } foreach (XmlNode child in node.ChildNodes) { if (child.Name == "Style") { KmlStyle style = new KmlStyle(); style.LoadDetails(child, owner); Style = style; if (!string.IsNullOrEmpty(style.ID)) { owner.Styles.Add(style.ID, style); } } if (child.Name == "StyleMap") { KmlStyleMap style = new KmlStyleMap(); style.LoadDetails(child, owner); if (!string.IsNullOrEmpty(style.ID)) { owner.Styles.Add(style.ID, style); } } } base.LoadDetails(node, owner); if (node["open"] != null) { open = node["open"].InnerText.Trim() == "1"; } if (node["visibility"] != null) { visibility = node["visibility"].InnerText.Trim() == "1"; } if (node["atom:author"] != null) { atom_author = node["atom:author"].InnerText; } if (node["atom:link"] != null) { atom_link = node["atom:link"].InnerText; } if (node["address"] != null) { address = node["address"].InnerText; } if (node["xal:AddressDetails"] != null) { xal_AddressDetails = node["xal:AddressDetails"].InnerText; } if (node["description"] != null) { description = node["description"].InnerText; } if (node["Snippet"] != null) { Snippet = node["Snippet"].InnerText; } if (node["Region"] != null) { region = new KmlRegion(); region.LoadDetails(node["Region"], owner); } if (node["LookAt"] != null) { LookAt = new KmlLookAt(); LookAt.LoadDetails(node["LookAt"], owner); } if (node["TimeSpan"] != null) { Time = new KmlTimeSpan(); Time.LoadDetails(node["TimeSpan"], owner); owner.UpdateTimeSpanRange(Time); } if (node["TimeStamp"] != null) { Time = new KmlTimeSpan(); Time.LoadDetails(node["TimeStamp"], owner); owner.UpdateTimeSpanRange(Time); } if (node["styleUrl"] != null) { string url = node["styleUrl"].InnerText; if (url.StartsWith("#")) { // Internal reference if (owner != null) { if (owner.Document != null) { this.Style = owner.Styles[url.Remove(0, 1)]; } } } } if (node["StyleSelector"] != null) { Style = new KmlStyle(); if (node["StyleSelector"]["Style"] != null) { Style.LoadDetails(node["StyleSelector"]["Style"], owner); } //todo add stle options } //todo finish up all of this ! Missing fields and types galore }
public KmlRoot(string filename, KmlRoot owner) { TimeSpan = new KmlTimeSpan(); // Set high and low points. TimeSpan.BeginTime = new DateTime(3999, 1, 1); TimeSpan.EndTime = new DateTime(1, 1, 1); Owner = owner; if (Uri.IsWellFormedUriString(filename, UriKind.Absolute)) { BaseUri = new Uri(filename); } if (!File.Exists(filename) && owner != null & owner.BaseUri != null) { Uri newUri = new Uri(owner.BaseUri, filename); filename = newUri.ToString(); } XmlDocument doc = new XmlDocument(); XmlNamespaceManager NamespaceManager = new XmlNamespaceManager(doc.NameTable); NamespaceManager.AddNamespace("atom", "http://www.w3.org/2005/Atom"); if (filename.ToLower().Contains(".kmz")) { if (Uri.IsWellFormedUriString(filename, UriKind.Absolute)) { Stream fs = UiTools.GetMemoryStreamFromUrl(filename); Archive = new ZipArchive(fs); foreach (ZipEntry entry in Archive.Files) { if (entry.Filename.ToLower().EndsWith(".kml")) { doc.Load(entry.GetFileStream()); } } } else { // using (FileStream fs = new FileStream(filename, FileMode.Open)) FileStream fs = new FileStream(filename, FileMode.Open); { ZipArchive archive = new ZipArchive(fs); foreach (ZipEntry entry in archive.Files) { if (entry.Filename.ToLower().EndsWith(".kml")) { doc.Load(entry.GetFileStream()); Archive = archive; } } } } } else { try { //todo this really needs to be fixed. doc.Load(filename); } catch { } } XmlNode kml = doc["kml"]; if (kml == null) { return; } if (kml.Attributes["hint"] != null) { if (kml.Attributes["hint"].InnerText.ToLower().Contains("sky")) { sky = true; } } LoadDetails(kml); LoadStatus = KmlLoadStatus.Loaded; }