예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        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
            {
            }
        }