コード例 #1
0
        /// <summary>
        /// WFSCapabilities
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public WFSCapabilities Parse(string xml)
        {
            WFS_Schemas.Ver1_1_0.WFS_CapabilitiesType readWFSCaps = WFS_CapabilitiesType.Deserialize(xml);
            var wfsCapabilities = new WFSCapabilities();


            // Parse version
            wfsCapabilities.Version = readWFSCaps.version;


            // Parse service
            wfsCapabilities.Service          = new WfsService();
            wfsCapabilities.Service.Title    = readWFSCaps.ServiceIdentification.Title;
            wfsCapabilities.Service.Abstract = readWFSCaps.ServiceIdentification.Abstract;
            wfsCapabilities.Service.Name     = readWFSCaps.ServiceIdentification.ServiceType.Value;
            wfsCapabilities.Service.Keywords = new List <string>();
            foreach (KeywordsType keywords in readWFSCaps.ServiceIdentification.Keywords)
            {
                wfsCapabilities.Service.Keywords.AddRange(keywords.Keyword);
            }
            wfsCapabilities.Service.Fees = readWFSCaps.ServiceIdentification.Fees;
            wfsCapabilities.Service.AccessConstraints = new List <string>(readWFSCaps.ServiceIdentification.AccessConstraints);



            // Parse capability
            ParseCapability(readWFSCaps, wfsCapabilities);

            ParseFeatureTypes(readWFSCaps, wfsCapabilities);

            return(wfsCapabilities);
        }
コード例 #2
0
        public static AddWfsLayerViewModel Create(string serverUrl, WFSCapabilities wfsCapabilities)
        {
            var model = new AddWfsLayerViewModel();

            model.WfsCapabilities = wfsCapabilities;
            model.ServerUrl       = serverUrl;
            return(model);
        }
        private void ParseCapability(WFS_Schemas.WFS_CapabilitiesType readWFSCaps, WFSCapabilities wfsCapabilities)
        {
            // Parse GetFeatureRequest
            wfsCapabilities.Capability          = new WfsCapability();
            wfsCapabilities.Capability.Requests = new WfsRequests();
            wfsCapabilities.Capability.Requests.GetFeaturesRequest         = new WfsGetFeaturesRequest();
            wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest = new WfsDescribeFeatureTypeRequest();

            for (int i = 0; i < readWFSCaps.Capability.Request.ItemsElementName.Length; i++)
            {
                ItemsChoiceType operation = readWFSCaps.Capability.Request.ItemsElementName[i];

                if (operation == ItemsChoiceType.GetFeature)
                {
                    GetFeatureTypeType getFeatureType = (GetFeatureTypeType)readWFSCaps.Capability.Request.Items[i];
                    // todo - fel i schema för format???

                    foreach (DCPTypeType dcpType in getFeatureType.DCPType)
                    {
                        if (dcpType.HTTP.IsNotEmpty())
                        {
                            if (dcpType.HTTP[0].GetType() == typeof(GetType))
                            {
                                wfsCapabilities.Capability.Requests.GetFeaturesRequest.GetUrl = ((GetType)dcpType.HTTP[0]).onlineResource;
                            }
                            else if (dcpType.HTTP[0].GetType() == typeof(PostType))
                            {
                                wfsCapabilities.Capability.Requests.GetFeaturesRequest.PostUrl = ((PostType)dcpType.HTTP[0]).onlineResource;
                            }
                        }
                    }
                }
                else if (operation == ItemsChoiceType.DescribeFeatureType)
                {
                    DescribeFeatureTypeType describeFeatureType = (DescribeFeatureTypeType)readWFSCaps.Capability.Request.Items[i];

                    foreach (DCPTypeType dcpType in describeFeatureType.DCPType)
                    {
                        if (dcpType.HTTP.IsNotEmpty())
                        {
                            if (dcpType.HTTP[0].GetType() == typeof(GetType))
                            {
                                wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest.GetUrl = ((GetType)dcpType.HTTP[0]).onlineResource;
                            }
                            else if (dcpType.HTTP[0].GetType() == typeof(PostType))
                            {
                                wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest.PostUrl = ((PostType)dcpType.HTTP[0]).onlineResource;
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// TBD ?!?
        /// </summary>
        public WFSCapabilities Parse(string xml)
        {
            WFS_Schemas.WFS_CapabilitiesType readWFSCaps = WFS_Schemas.WFS_CapabilitiesType.Deserialize(xml);
            var wfsCapabilities = new WFSCapabilities();

            wfsCapabilities.Version = readWFSCaps.version; // Parse version
            ParseService(readWFSCaps, wfsCapabilities);
            ParseCapability(readWFSCaps, wfsCapabilities);
            ParseFeatureTypes(readWFSCaps, wfsCapabilities);
            ParseXml(xml, wfsCapabilities);

            return(wfsCapabilities);
        }
コード例 #5
0
        /// <summary>
        /// Makes a GetCapabilities request and a DescribeFeature request
        /// The feature type that we get from DescribeFeature is added to
        /// the WfsCapabilities object.
        /// </summary>
        /// <param name="url">The WFS Server URL.</param>
        /// <param name="typeName">The feature layer name including namespace.</param>
        /// <returns></returns>
        public static WFSCapabilities GetWFSCapabilitiesAndMergeDescribeFeatureType(string url, string typeName)
        {
            WFSCapabilities        wfsCapabilities     = GetWFSCapabilities(url);
            WFSDescribeFeatureType describeFeatureType = GetWFSDescribeFeatureType(url, typeName);

            foreach (var featureType in wfsCapabilities.FeatureTypes)
            {
                if (featureType.Name.FullName == describeFeatureType.Name.FullName)
                {
                    featureType.DescribeFeatureType = describeFeatureType;
                }
            }

            return(wfsCapabilities);
        }
コード例 #6
0
        /// <summary>
        /// Makes a GetCapabilities request and a DescribeFeature request
        /// The feature types that we get from DescribeFeature is added to
        /// the WfsCapabilities object.
        /// </summary>
        /// <param name="url">The WFS Server URL.</param>
        /// <returns></returns>
        public static WFSCapabilities GetWFSCapabilitiesAndMergeDescribeFeatureTypes(string url)
        {
            WFSCapabilities wfsCapabilities = GetWFSCapabilities(url);
            Dictionary <string, WFSDescribeFeatureType> dicDescribeFeatureTypes = GetWFSDescribeFeatureTypes(url, wfsCapabilities.FeatureTypes);

            //List<WFSDescribeFeatureType> describeFeatureTypes = dicDescribeFeatureTypes.Values.ToList();

            foreach (var featureType in wfsCapabilities.FeatureTypes)
            {
                WFSDescribeFeatureType describeFeatureType;
                if (dicDescribeFeatureTypes.TryGetValue(featureType.Name.FullName, out describeFeatureType))
                {
                    featureType.DescribeFeatureType = describeFeatureType;
                }
            }

            return(wfsCapabilities);
        }
コード例 #7
0
        private void ParseFeatureTypes(WFS_CapabilitiesType readWFSCaps, WFSCapabilities wfsCapabilities)
        {
            wfsCapabilities.FeatureTypes = new List <WfsFeatureType>();

            foreach (FeatureTypeType readFeatureType in readWFSCaps.FeatureTypeList.FeatureType)
            {
                WfsFeatureType featureType = new WfsFeatureType();
                featureType.Abstract = readFeatureType.Abstract;

                featureType.Keywords = new List <string>();
                foreach (KeywordsType keywordsType in readFeatureType.Keywords)
                {
                    featureType.Keywords.AddRange(keywordsType.Keyword);
                }
                if (readFeatureType.MetadataURL.IsNotEmpty())
                {
                    featureType.MetadataURL = readFeatureType.MetadataURL[0].Value;
                }

                featureType.Name  = new WfsTypeName(readFeatureType.Name);
                featureType.Title = readFeatureType.Title;
                for (int i = 0; i < readFeatureType.ItemsElementName.Length; i++)
                {
                    var itemsChoiceType = readFeatureType.ItemsElementName[i];
                    if (itemsChoiceType == ItemsChoiceType14.DefaultSRS)
                    {
                        featureType.SRS = readFeatureType.Items[i].ToString();
                    }
                }

                featureType.BoundingBox = new WfsBoundingBox();
                if (readFeatureType.WGS84BoundingBox.IsNotEmpty())
                {
                    var readBBox = readFeatureType.WGS84BoundingBox[0];
                    featureType.BoundingBox.CRS         = readBBox.crs;
                    featureType.BoundingBox.LowerCorner = readBBox.LowerCorner;
                    featureType.BoundingBox.UpperCorner = readBBox.UpperCorner;
                    featureType.BoundingBox.Dimensions  = readBBox.dimensions;
                }
                wfsCapabilities.FeatureTypes.Add(featureType);
            }
        }
 private void ParseService(WFS_CapabilitiesType readWFSCaps, WFSCapabilities wfsCapabilities)
 {
     wfsCapabilities.Service          = new WfsService();
     wfsCapabilities.Service.Title    = readWFSCaps.Service.Title;
     wfsCapabilities.Service.Abstract = readWFSCaps.Service.Abstract;
     wfsCapabilities.Service.Name     = readWFSCaps.Service.Name;
     string[] keywords = readWFSCaps.Service.Keywords.Split(',');
     for (int i = 0; i < keywords.Length; i++)
     {
         keywords[i] = keywords[i].Trim();
     }
     wfsCapabilities.Service.Keywords = new List <string>(keywords);
     wfsCapabilities.Service.Fees     = readWFSCaps.Service.Fees;
     // osäker på om listan ska splittas med ',' eller hur den är uppbyggd.
     string[] accessConstraints = readWFSCaps.Service.AccessConstraints.Split(',');
     for (int i = 0; i < accessConstraints.Length; i++)
     {
         accessConstraints[i] = accessConstraints[i].Trim();
     }
     wfsCapabilities.Service.AccessConstraints = new List <string>(accessConstraints);
 }
コード例 #9
0
        /// <summary>
        /// Creates a view model to use in WfsLayerEditor when we create a new layer.
        /// </summary>
        /// <param name="url">The server URL.</param>
        /// <param name="typeName">The typename.</param>
        /// <param name="filter">The filter.</param>
        /// <returns></returns>
        public WfsLayerEditorViewModel CreateWfsLayerEditorViewModelInCreateNewMode(string url, string typeName, string filter)
        {
            WFSCapabilities wfsCapabilities = WFSManager.GetWFSCapabilitiesAndMergeDescribeFeatureType(url, typeName);

            ArtDatabanken.GIS.WFS.Capabilities.WfsFeatureType featureType = wfsCapabilities.FeatureTypes.FirstOrDefault(feature => feature.Name.FullName == typeName);

            var model = new WfsLayerEditorViewModel();

            model.Mode            = WfsLayerEditorMode.New;
            model.WfsCapabilities = wfsCapabilities;
            model.FeatureType     = featureType;
            model.ServerUrl       = wfsCapabilities.Capability.Requests.GetFeaturesRequest.GetUrlBase;
            var wfsLayerSetting = new WfsLayerSetting();

            wfsLayerSetting.Filter = "";
            wfsLayerSetting.Name   = "";
            wfsLayerSetting.Color  = MapLayersSetting.CreateMapLayerHexColor();
            model.WfsLayerSetting  = wfsLayerSetting;

            return(model);
        }
        private void ParseXml(string strXml, WFSCapabilities wfsCapabilities)
        {
            XPathNavigator    nav;
            XPathDocument     docNav;
            XPathNodeIterator NodeIter;

            //  String strExpression;

            try
            {
                using (StringReader stream = new StringReader(strXml))
                {
                    docNav = new XPathDocument(stream);
                    nav    = docNav.CreateNavigator();

                    var ns = new XmlNamespaceManager(nav.NameTable);
                    ns.AddNamespace("wfs", "http://www.opengis.net/wfs");
                    ns.AddNamespace("ows", "http://www.opengis.net/ows");
                    ns.AddNamespace("xlink", "http://www.w3.org/1999/xlink");

                    XPathExpression expr = nav.Compile("/wfs:WFS_Capabilities/wfs:Capability/wfs:Request/wfs:GetFeature/wfs:ResultFormat/*");
                    expr.SetContext(ns);
                    NodeIter = nav.Select(expr);

                    var formats = new List <string>();
                    while (NodeIter.MoveNext())
                    {
                        if (!string.IsNullOrEmpty(NodeIter.Current.Name))
                        {
                            formats.Add(NodeIter.Current.Name);
                        }
                    }
                    wfsCapabilities.Capability.Requests.GetFeaturesRequest.Formats = formats;
                }
            }
            catch (Exception)
            {
            }
        }
        private void ParseFeatureTypes(WFS_CapabilitiesType readWFSCaps, WFSCapabilities wfsCapabilities)
        {
            wfsCapabilities.FeatureTypes = new List <WfsFeatureType>();

            foreach (FeatureTypeType readFeatureType in readWFSCaps.FeatureTypeList.FeatureType)
            {
                WfsFeatureType featureType = new WfsFeatureType();
                featureType.Abstract = readFeatureType.Abstract;

                featureType.Keywords = new List <string>();
                // osäker på om listan ska splittas med ',' eller hur den är uppbyggd.
                string[] keywords = readFeatureType.Keywords.Split(',');
                for (int i = 0; i < keywords.Length; i++)
                {
                    keywords[i] = keywords[i].Trim();
                }
                featureType.Keywords = new List <string>(keywords);

                if (readFeatureType.MetadataURL.IsNotEmpty())
                {
                    featureType.MetadataURL = readFeatureType.MetadataURL[0].Value;
                }

                featureType.Name  = new WfsTypeName(readFeatureType.Name);
                featureType.Title = readFeatureType.Title;
                featureType.SRS   = readFeatureType.SRS;

                featureType.BoundingBox = new WfsBoundingBox();
                if (readFeatureType.LatLongBoundingBox.IsNotEmpty())
                {
                    var readBBox = readFeatureType.LatLongBoundingBox[0];
                    featureType.BoundingBox.LowerCorner = readBBox.minx + " " + readBBox.miny;
                    featureType.BoundingBox.UpperCorner = readBBox.maxx + " " + readBBox.maxy;
                }
                wfsCapabilities.FeatureTypes.Add(featureType);
            }
        }
コード例 #12
0
        private void ParseCapability(WFS_CapabilitiesType readWFSCaps, WFSCapabilities wfsCapabilities)
        {
            // Parse GetFeatureRequest
            wfsCapabilities.Capability          = new WfsCapability();
            wfsCapabilities.Capability.Requests = new WfsRequests();
            wfsCapabilities.Capability.Requests.GetFeaturesRequest         = new WfsGetFeaturesRequest();
            wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest = new WfsDescribeFeatureTypeRequest();

            foreach (Operation operation in readWFSCaps.OperationsMetadata.Operation)
            {
                // Requests.GetFeaturesRequest
                if (operation.name.ToLower() == "getfeature")
                {
                    foreach (var parameter in operation.Parameter)
                    {
                        // Formats
                        if (parameter.name.ToLower() == "outputformat")
                        {
                            wfsCapabilities.Capability.Requests.GetFeaturesRequest.Formats = new List <string>(parameter.Value);
                        }
                        // ResultType
                        else if (parameter.name.ToLower() == "resulttype")
                        {
                            wfsCapabilities.Capability.Requests.GetFeaturesRequest.ResultType = new List <string>(parameter.Value);
                        }
                    }


                    if (operation.DCP.IsNotEmpty() && operation.DCP[0].Item != null)
                    {
                        HTTP item = operation.DCP[0].Item;
                        for (int i = 0; i < item.ItemsElementName.Length; i++)
                        {
                            // GetUrl
                            if (item.ItemsElementName[i] == ItemsChoiceType15.Get)
                            {
                                wfsCapabilities.Capability.Requests.GetFeaturesRequest.GetUrl = item.Items[i].href + "?request=GetFeature";
                            }
                            // PostUrl
                            else if (item.ItemsElementName[i] == ItemsChoiceType15.Post)
                            {
                                wfsCapabilities.Capability.Requests.GetFeaturesRequest.PostUrl = item.Items[i].href;
                            }
                        }
                    }
                }

                // Requests.DescribeFeatureTypeRequest
                else if (operation.name.ToLower() == "describefeaturetype")
                {
                    foreach (var parameter in operation.Parameter)
                    {
                        // Formats
                        if (parameter.name.ToLower() == "outputformat")
                        {
                            wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest.Formats = new List <string>(parameter.Value);
                        }
                    }

                    if (operation.DCP.IsNotEmpty() && operation.DCP[0].Item != null)
                    {
                        HTTP item = operation.DCP[0].Item;
                        for (int i = 0; i < item.ItemsElementName.Length; i++)
                        {
                            // GetUrl
                            if (item.ItemsElementName[i] == ItemsChoiceType15.Get)
                            {
                                wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest.GetUrl = item.Items[i].href + "?request=DescribeFeatureType";
                            }
                            // PostUrl
                            else if (item.ItemsElementName[i] == ItemsChoiceType15.Post)
                            {
                                wfsCapabilities.Capability.Requests.DescribeFeatureTypeRequest.PostUrl = item.Items[i].href;
                            }
                        }
                    }
                }
            }
        }