public WmsTileSourceFactory(ILayerConfig layerConfig) { this.layerConfig = layerConfig; Uri uri = new Uri(layerConfig.Url); var request = (HttpWebRequest)WebRequest.Create(uri); //referer and username password for access request.Referer = "http://astra.admin.ch"; if (String.IsNullOrEmpty(layerConfig.Username) && String.IsNullOrEmpty(layerConfig.Password)) { request.Credentials = new NetworkCredential(layerConfig.Username, layerConfig.Password); } WebResponse resp = request.GetResponse(); var ser = new XmlSerializer(typeof(WMS_Capabilities)); using (var reader = new StreamReader(resp.GetResponseStream())) { capabilities = (WMS_Capabilities)ser.Deserialize(reader); } this.Format = !String.IsNullOrEmpty(layerConfig.Format) && capabilities.Capability.Request.GetMap.Format.Contains(layerConfig.Format) ? layerConfig.Format : capabilities.Capability.Request.GetMap.Format.First(); }
public void GetWMSCapabilitiesTest() { string url = _wmsHandlerURL + "?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Assert.AreEqual("text/xml", response.ContentType); // Get the stream associated with the response. Stream receiveStream = response.GetResponseStream(); // Serialize XmlSerializer serializer = new XmlSerializer(typeof(WMS_Capabilities), Declarations.WmsNameSpace); WMS_Capabilities capabilities = (WMS_Capabilities)serializer.Deserialize(receiveStream); Assert.AreEqual(capabilities.Version, "1.3.0"); Assert.AreNotEqual(capabilities.Capability.Layer.LayerList.Count, 0); Assert.AreNotEqual(capabilities.Service.KeywordList.Count, 0); Assert.IsNotNull(capabilities.Service.ContactInformation); Assert.AreEqual("Web Map Service", capabilities.Service.Title); }
/// <summary> /// OGC WMS GetCapabilities /// </summary> /// <param name="context"></param> private void ProcessGetCapabilities(HttpResponse response, StringDictionary parameters) { //Service parameter is mandatory for GetCapabilities request if (String.IsNullOrEmpty(parameters[OgcParameters.Service])) { SetResponseToServiceException(response, OgcErrorMessages.RequiredParameter(OgcParameters.Service)); return; } if (String.Compare(parameters[OgcParameters.Service], ServiceNames.WMS.ToString()) != 0) { SetResponseToServiceException(response, "Invalid service for GetCapabilities Request. Service parameter must be 'WMS'"); return; } // deserialise template GetCapabilities document XmlSerializer deSerializer = new XmlSerializer(typeof(WMS_Capabilities), Declarations.WmsNameSpace); FileStream readStream = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "WMSCapabilities.xml"), FileMode.Open, FileAccess.Read); WMS_Capabilities wmsCapabilities = (WMS_Capabilities)deSerializer.Deserialize(readStream); readStream.Close(); // get the map service view context ViewContext webMapContext = OgcUtilities.GetViewContext(); // add layers List <GeospatialServices.Ogc.Wms.Layer> wmsLayers = new List <GeospatialServices.Ogc.Wms.Layer>(); foreach (var layer in webMapContext.Layers) { GeospatialServices.Ogc.Wms.Layer ogcLayer = new GeospatialServices.Ogc.Wms.Layer( ); ogcLayer.Queryable = 1; ogcLayer.Name = layer.Name; ogcLayer.Title = layer.Title; ogcLayer.CRSList.Add(layer.SRS); wmsLayers.Add(ogcLayer); } wmsCapabilities.Capability.Layer.LayerList = wmsLayers; // Namespaces XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add(Declarations.WmsPrefix, Declarations.WmsNameSpace); namespaces.Add(Declarations.OgcPrefix, Declarations.OgcNameSpace); namespaces.Add(Declarations.XlinkPrefix, Declarations.XlinkNameSpace); // Serialize XmlSerializer capSerializer = new XmlSerializer(typeof(WMS_Capabilities), Declarations.WmsNameSpace); MemoryStream memoryStream = new MemoryStream(); capSerializer.Serialize(memoryStream, wmsCapabilities, namespaces); byte[] buffer = memoryStream.ToArray(); response.Clear(); response.ContentType = "text/xml"; response.OutputStream.Write(buffer, 0, buffer.Length); }
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 { } }