/// <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); }
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); }
/// <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); }
/// <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); }
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); }
/// <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); } }
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; } } } } } }