예제 #1
0
        public static IEnumerable<ITileSource> CreateFromWmscCapabilties(XDocument document)
        {
            var wmsCapabilities = new WmsCapabilities(document);

            return ParseVendorSpecificCapabilitiesNode(
                (XElement)wmsCapabilities.Capability.ExtendedCapabilities[XName.Get("VendorSpecificCapabilities")],
                wmsCapabilities.Capability.Request.GetCapabilities.DCPType[0].Http.Get.OnlineResource);
        }
예제 #2
0
        public void WmsCapabilities_WhenInitializedWithWmsC_ShouldInitializeAllTileLayers()
        {
            // arrange
            using (var stream = File.OpenRead(Path.Combine("Resources", @"WmsCCapabilities_1_1_1.xml")))
            {
                // act
                var capabilities = new WmsCapabilities(stream);

                // assert
                Assert.NotNull(capabilities.Version);
                Assert.AreEqual(54, capabilities.Capability.Layer.ChildLayers.Count);
            }
        }
예제 #3
0
        public void WmsCapabilities_WhenCreatedWithValidCapabilitiesV111Document_ShouldInitializeCorrectly()
        {
            // arrange
            using (var stream = File.OpenRead(Path.Combine("Resources", @"FrioCountyTXMapsWmsCapabilities_1_1_1.xml")))
            {
                // act
                var capabilities = new WmsCapabilities(stream);

                // assert
                Assert.NotNull(capabilities.Version);
                Assert.AreEqual("Frio County TX Maps", capabilities.Capability.Layer.Title);
                Assert.AreEqual(13, capabilities.Capability.Layer.ChildLayers.Count);
            }
        }
예제 #4
0
        public void WmsCapabilities_WhenCreatedWithCapabilitiesWithMultipleRootLayers_ShouldInitializeCorrectly()
        {
            // arrange
            using (var stream = File.OpenRead(Path.Combine("Resources", @"MultiTopLayersCapabilities_1_3_0.xml")))
            {
                // act
                var capabilities = new WmsCapabilities(stream);

                // assert
                Assert.NotNull(capabilities.Version);
                Assert.AreEqual("Root Layer", capabilities.Capability.Layer.Title);
                Assert.AreEqual(4, capabilities.Capability.Layer.ChildLayers.Count);
            }
        }
예제 #5
0
        public void WmsCapabilities_WhenParsed_ShouldSetCorrectGetMapUrl()
        {
            // arrange
            using (var stream = File.OpenRead(Path.Combine("Resources", @"BgrGroundwaterWhyMapCapabilities_1_1_1.xml")))
            {
                const string expectedUrl = "http://www.bgr.de/Service/groundwater/whymap/?";

                // act
                var capabilities = new WmsCapabilities(stream);

                // assert
                Assert.True(expectedUrl == capabilities.Capability.Request.GetMap.DCPType[0].Http.Get.OnlineResource.Href);
            }
        }
예제 #6
0
        public static WmsCapabilities Parse(Stream stream)
        {
            var settings = new XmlReaderSettings
#if NET35
            {
                ProhibitDtd = false
            };
#else
            { DtdProcessing = DtdProcessing.Ignore };
#endif

            using (var reader = XmlReader.Create(stream, settings))
            {
                reader.MoveToContent();

                var version        = reader.GetAttribute("version");
                var wms            = new WmsCapabilities(version);
                var updateSequence = reader.GetAttribute("updateSequence");
                if (!string.IsNullOrEmpty(updateSequence))
                {
                    wms.UpdateSequence = int.Parse(updateSequence, NumberFormatInfo.InvariantInfo);
                }

                if (reader.IsEmptyElement)
                {
                    reader.Read();
                    return(null);
                }

                if (wms.Version.Version >= WmsVersionEnum.Version_1_3_0)
                {
                    reader.ReadStartElement("WMS_Capabilities");
                }
                else
                {
                    reader.ReadStartElement("WMT_MS_Capabilities");
                }

                reader.MoveToContent();
                wms.Service.ReadXml(reader.ReadSubtree());
                reader.ReadEndElement();

                reader.MoveToContent();
                wms.Capability.ReadXml(reader.ReadSubtree());
                reader.ReadEndElement();

                reader.ReadEndElement();
                return(wms);
            }
        }
예제 #7
0
        public WMSServerParameters(WmsInfo data)
        {
            InitializeComponent();
            
            WmsInfo = data;
            if (WmsInfo == null) return;

            _wmsCapabilities = WmsInfo.WmsCapabilities;
            tbServerUrl.Text = WmsInfo.ServerUrl;
            if (WmsInfo.Credentials != null)
            {
                tbLogin.Text = WmsInfo.Credentials.UserName;
                tbPassword.Text = WmsInfo.Credentials.Password;
            }

            ShowServerDetails(_wmsCapabilities);
            InitLayers(_wmsCapabilities);

            // Select layer
            tvLayers.SelectedNode = FindNodeByLayer(tvLayers.Nodes, WmsInfo.Layer);
            if (tvLayers.SelectedNode != null) tvLayers.SelectedNode.EnsureVisible();
            tvLayers.Select();
            tvLayers.Focus();

            // Select CRS
            lbCRS.SelectedItem = WmsInfo.CRS;

            // Select Style
            for (int i = 0; i < lbStyles.Items.Count; i++)
            {
                var style = (StyleWrapper) lbStyles.Items[i];
                if (style.Style.Name == WmsInfo.Style)
                {
                    lbStyles.SelectedIndex = i;
                    break;
                }
            }

            // Show custom parameters
            if (WmsInfo.CustomParameters != null)
            {
                tbCustomParameters.Text = string.Join(Environment.NewLine,
                    WmsInfo.CustomParameters.Select(d => string.Format("{0}={1}", d.Key, d.Value)));
            }
        }
예제 #8
0
        public static WmsCapabilities Parse(Stream stream)
        {
            var settings = new XmlReaderSettings
#if NET35
            { ProhibitDtd = false };
#else
            { DtdProcessing = DtdProcessing.Ignore };
#endif
            
            using (var reader = XmlReader.Create(stream, settings))
            {
                reader.MoveToContent();

                var version = reader.GetAttribute("version");
                var wms = new WmsCapabilities(version);
                var updateSequence = reader.GetAttribute("updateSequence");
                if (!string.IsNullOrEmpty(updateSequence))
                    wms.UpdateSequence = int.Parse(updateSequence, NumberFormatInfo.InvariantInfo);

                if (reader.IsEmptyElement)
                {
                    reader.Read();
                    return null;
                }

                if (wms.Version.Version >= WmsVersionEnum.Version_1_3_0)
                    reader.ReadStartElement("WMS_Capabilities");
                else
                {
                    reader.ReadStartElement("WMT_MS_Capabilities");
                }

                reader.MoveToContent();
                wms.Service.ReadXml(reader.ReadSubtree());
                reader.ReadEndElement();

                reader.MoveToContent();
                wms.Capability.ReadXml(reader.ReadSubtree());
                reader.ReadEndElement();

                reader.ReadEndElement();
                return wms;
            }
        }
예제 #9
0
        private void btnGetCapabilities_Click(object sender, EventArgs e)
        {
            var serverUrl = tbServerUrl.Text;
            if (String.IsNullOrWhiteSpace(serverUrl)) return;

            if (serverUrl.IndexOf("Request=GetCapabilities", StringComparison.OrdinalIgnoreCase) < 0)
            {
                serverUrl = serverUrl + "&Request=GetCapabilities";
            }
            if (serverUrl.IndexOf("SERVICE=WMS", StringComparison.OrdinalIgnoreCase) < 0)
            {
                serverUrl = serverUrl + "&SERVICE=WMS";
            }

            WmsCapabilities capabilities;
            try
            {
                var myRequest = WebRequest.Create(serverUrl);
                myRequest.Credentials = GetUserCredentials();
                using (var myResponse = myRequest.GetResponse())
                using (var stream = myResponse.GetResponseStream())
                    capabilities = new WmsCapabilities(stream);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unable to read capabilities: " + ex.Message);
                return;
            }

            WmsInfo = null;
            _wmsCapabilities = capabilities;

            ShowServerDetails(capabilities);
            InitLayers(capabilities);
        }
예제 #10
0
 private void InitLayers(WmsCapabilities capabilities)
 {
     tvLayers.Nodes.Clear();
     FillTree(tvLayers.Nodes, capabilities.Capability.Layer);
     tvLayers.ExpandAll();   
 }
예제 #11
0
 private void ShowServerDetails(WmsCapabilities capabilities)
 {
     tbServerTitle.Text = capabilities.Service.Title;
     tbServerAbstract.Text = capabilities.Service.Abstract;
     tbServerOnlineResource.Text = capabilities.Service.OnlineResource.Href;
     tbServerAccessConstraints.Text = capabilities.Service.AccessConstraints;
 }