public static WMS_Tile_Service LoadFromSream(Stream stream) { XmlSerializer serializer = new XmlSerializer(typeof(WMS_Tile_Service)); WMS_Tile_Service newCaps = (WMS_Tile_Service)serializer.Deserialize(stream); return(newCaps); }
private void ShowCapababilities(bool download) { if (ServerList.SelectedIndex < 0) { return; } add.Enabled = false; LayersTree.Nodes.Clear(); Abstract.Text = ""; WmsServerEntry wse = (WmsServerEntry)ServerList.SelectedItem; string req = "REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0"; if (wse.Url.Contains("?")) { req = "&" + req; } else { req = "?" + req; } string url = wse.Url + req; string filename = Properties.Settings.Default.CahceDirectory + "data\\wms\\" + ((uint)url.GetHashCode32()).ToString() + ".xml"; string tiledFilename = Properties.Settings.Default.CahceDirectory + "data\\wms\\" + ((uint)url.GetHashCode32()).ToString() + ".tiled.xml"; if (!File.Exists(filename) && !download) { LayersTree.Nodes.Add(Language.GetLocalizedText(910, "Not loaded - Click Get Layers to download now")); return; } if (!FileDownload.DownloadFile(url, filename, download)) { return; } bool tiled = false; string tiledUrl = ""; try { using (Stream stream = File.Open(filename, FileMode.Open)) { WMS_Capabilities caps = WMS_Capabilities.LoadFromSream(stream); serviceUrl = caps.Capability.Request.GetMap.DCPType[0].HTTP.Get.OnlineResource.href; if (!serviceUrl.Contains("?")) { serviceUrl += "?"; } wmsVersion = caps.version; stream.Close(); if (caps.Capability.Request.GetTileService != null && !string.IsNullOrEmpty(caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href)) { tiled = true; tiledUrl = caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href + "request=GetTileService"; serviceUrl = caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href; if (!serviceUrl.Contains("?")) { serviceUrl += "?"; } } if (!tiled) { AddChildren(caps.Capability.Layer, LayersTree.Nodes); } } } catch { try { using (Stream stream = File.Open(filename, FileMode.Open)) { WMT_MS_Capabilities caps = WMT_MS_Capabilities.LoadFromSream(stream); serviceUrl = caps.Capability.Request.GetMap.DCPType[0].HTTP.Get.OnlineResource.href; if (!serviceUrl.Contains("?")) { serviceUrl += "?"; } wmsVersion = caps.version; stream.Close(); if (caps.Capability.Request.GetTileService != null && !string.IsNullOrEmpty(caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href)) { tiled = true; tiledUrl = caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href + "request=GetTileService"; serviceUrl = caps.Capability.Request.GetTileService.DCPType[0].HTTP.Get.OnlineResource.href; if (!serviceUrl.Contains("?")) { serviceUrl += "?"; } } if (!tiled) { AddChildren(caps.Capability.Layer, LayersTree.Nodes); } } } catch { } } // Add Tiled if supported try { if (tiled) { if (!FileDownload.DownloadFile(tiledUrl, tiledFilename, false)) { return; } using (Stream stream = File.Open(tiledFilename, FileMode.Open)) { WMS_Tile_Service wts = WMS_Tile_Service.LoadFromSream(stream); AddChildren(wts.TiledPatterns[0].TiledGroup, LayersTree.Nodes); } } } catch { } }