/// <summary> /// Protected constructor for the abstract class. /// </summary> /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="labelInfo">A FeatureDataTable for labels</param> protected GeometryFactory(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo, FeatureDataTable labelInfo) { _FeatureTypeInfo = featureTypeInfo; Factory = featureTypeInfo.Factory; _httpClientUtil = httpClientUtil; createReader(httpClientUtil); try { if (labelInfo != null) { _LabelInfo = labelInfo; var pathNodes = new IPathNode[labelInfo.Columns.Count]; for (var i = 0; i < pathNodes.Length; i++) { pathNodes[i] = new PathNode(_FeatureTypeInfo.FeatureTypeNamespace, _LabelInfo.Columns[i].ColumnName, (NameTable)_XmlReader.NameTable); } _LabelNode = new AlternativePathNodesCollection(pathNodes); } } catch (Exception ex) { Trace.TraceError("An exception occured while initializing the label path node!"); throw ex; } initializePathNodes(); initializeSeparators(); }
/// <summary> /// Protected constructor for the abstract class. /// </summary> /// <param name="xmlReader">An XmlReader instance</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> protected GeometryFactory(XmlReader xmlReader, WfsFeatureTypeInfo featureTypeInfo) { _FeatureTypeInfo = featureTypeInfo; Factory = featureTypeInfo.Factory; _XmlReader = xmlReader; initializePathNodes(); initializeSeparators(); }
/// <summary> /// This method returns the POST request for 'GetFeature'. /// </summary> /// <param name="featureTypeInfo">A <see cref="Wfs.WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="labelProperty">A property necessary for label rendering</param> /// <param name="boundingBox">The bounding box of the query</param> /// <param name="filter">An instance implementing <see cref="IFilter"/></param> /// <param name="loadAllElements">True to get all feature elements, false to get only geometry element</param> public byte[] GetFeaturePOSTRequest(WfsFeatureTypeInfo featureTypeInfo, string labelProperty, Envelope boundingBox, IFilter filter, bool loadAllElements) { string qualification = string.IsNullOrEmpty(featureTypeInfo.Prefix) ? string.Empty : featureTypeInfo.Prefix + ":"; using (StringWriter sWriter = new StringWriter()) { using (XmlTextWriter xWriter = new XmlTextWriter(sWriter)) { xWriter.Namespaces = true; xWriter.WriteStartElement("GetFeature", NSWFS); xWriter.WriteAttributeString("service", "WFS"); xWriter.WriteAttributeString("version", "1.0.0"); xWriter.WriteStartElement("Query", NSWFS); xWriter.WriteAttributeString("typeName", qualification + featureTypeInfo.Name); if (!loadAllElements) { xWriter.WriteElementString("PropertyName", qualification + featureTypeInfo.Geometry._GeometryName); if (!string.IsNullOrEmpty(labelProperty)) { xWriter.WriteElementString("PropertyName", qualification + labelProperty); } } xWriter.WriteStartElement("Filter", NSOGC); xWriter.WriteStartElement("BBOX"); if (!loadAllElements) { xWriter.WriteElementString("PropertyName", featureTypeInfo.Geometry._GeometryName); } xWriter.WriteStartElement("gml", "Box", NSGML); xWriter.WriteAttributeString("srsName", "http://www.opengis.net/gml/srs/epsg.xml#" + featureTypeInfo.SRID); xWriter.WriteElementString("coordinates", NSGML, XmlConvert.ToString(boundingBox.MinX) + "," + XmlConvert.ToString(boundingBox.MinY) + " " + XmlConvert.ToString(boundingBox.MaxX) + "," + XmlConvert.ToString(boundingBox.MaxY)); xWriter.WriteEndElement(); xWriter.WriteEndElement(); if (filter != null) { xWriter.WriteRaw(filter.Encode()); } if (filter != null) { xWriter.WriteEndElement(); } xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.Flush(); return(Encoding.UTF8.GetBytes(sWriter.ToString())); } } }
/// <summary> /// Initializes a new instance of the <see cref="UnspecifiedGeometryFactory_WFS1_0_0_GML2"/> class. /// </summary> /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="multiGeometries">A boolean value specifying whether multi-geometries should be created</param> /// <param name="quickGeometries">A boolean value specifying whether the factory should create geometries quickly, but without validation</param> /// <param name="labelInfo">A FeatureDataTable for labels</param> internal UnspecifiedGeometryFactory_WFS1_0_0_GML2(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo, bool multiGeometries, bool quickGeometries, FeatureDataTable labelInfo) : base(httpClientUtil, featureTypeInfo, labelInfo) { _HttpClientUtil = httpClientUtil; _MultiGeometries = multiGeometries; _QuickGeometries = quickGeometries; }
/// <summary> /// This method returns the query string for 'GetFeature'. /// </summary> /// <param name="featureTypeInfo">A <see cref="Wfs.WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="boundingBox">The bounding box of the query</param> /// <param name="filter">An instance implementing <see cref="IFilter"/></param> /// <param name="loadAllElements">True to get all feature elements, false to get only geometry element</param> public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, Envelope boundingBox, IFilter filter, bool loadAllElements) { string qualification = string.IsNullOrEmpty(featureTypeInfo.Prefix) ? string.Empty : featureTypeInfo.Prefix + ":"; string filterString = string.Empty; if (filter != null) { filterString = filter.Encode(); filterString = filterString.Replace("<", "%3C"); filterString = filterString.Replace(">", "%3E"); filterString = filterString.Replace(" ", ""); filterString = filterString.Replace("*", "%2a"); filterString = filterString.Replace("#", "%23"); filterString = filterString.Replace("!", "%21"); } StringBuilder filterBuilder = new StringBuilder(); // &filter=<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"> filterBuilder.Append("&filter=%3CFilter%20xmlns=%22" + Uri.EscapeDataString(NSOGC) + "%22%20xmlns:gml=%22" + Uri.EscapeDataString(NSGML) + "%22%3E"); // <BBOX> filterBuilder.Append("%3CBBOX%3E"); if (!loadAllElements) { // <PropertyName> filterBuilder.Append("%3CPropertyName%3E"); filterBuilder.Append(qualification); filterBuilder.Append(featureTypeInfo.Geometry._GeometryName); // </PropertyName> filterBuilder.Append("%3C/PropertyName%3E"); } // <gml:Box srsName="EPSG:...."> filterBuilder.Append("%3Cgml:Box%20srsName=%22EPSG:" + featureTypeInfo.SRID + "%22%3E"); // <gml:coordinates> filterBuilder.Append("%3Cgml:coordinates%3E"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MinX) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.MinY) + "%20"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MaxX) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.MaxY)); // </gml:coordinates></gml:Box></BBOX> filterBuilder.Append("%3C/gml:coordinates%3E%3C/gml:Box%3E%3C/BBOX%3E"); filterBuilder.Append(filterString); filterBuilder.Append("%3C/Filter%3E"); return("?SERVICE=WFS&Version=1.0.0&REQUEST=GetFeature&TYPENAME=" + qualification + featureTypeInfo.Name + (loadAllElements ? "" : "&PROPERTYNAME=" + qualification + featureTypeInfo.Geometry._GeometryName) + "&SRS=" + featureTypeInfo.SRID + filterBuilder); }
/// <summary> /// Initializes a new instance of the <see cref="MultiPolygonFactory"/> class. /// </summary> /// <param name="xmlReader">An XmlReader instance</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> internal MultiPolygonFactory(XmlReader xmlReader, WfsFeatureTypeInfo featureTypeInfo) : base(xmlReader, featureTypeInfo) { }
/// <summary> /// Initializes a new instance of the <see cref="MultiPolygonFactory"/> class. /// </summary> /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="labelInfo">A FeatureDataTable for labels</param> internal MultiPolygonFactory(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo, FeatureDataTable labelInfo) : base(httpClientUtil, featureTypeInfo, labelInfo) { }
/// <summary> /// Initializes a new instance of the <see cref="MultiLineStringFactory"/> class. /// </summary> /// <param name="xmlReader">An XmlReader instance</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> internal MultiLineStringFactory(XmlReader xmlReader, WfsFeatureTypeInfo featureTypeInfo) : base(xmlReader, featureTypeInfo) { }
/// <summary> /// Initializes a new instance of the <see cref="PolygonFactory"/> class. /// This constructor shall just be called from the MultiPolygon factory. The feature node therefore is deactivated. /// </summary> /// <param name="xmlReader">An XmlReader instance</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> internal PolygonFactory(XmlReader xmlReader, WfsFeatureTypeInfo featureTypeInfo) : base(xmlReader, featureTypeInfo) { _FeatureNode.IsActive = false; }
/// <summary> /// Initializes a new instance of the <see cref="LineStringFactory"/> class. /// This constructor shall just be called from the MultiLineString factory. The feature node therefore is deactivated. /// </summary> /// <param name="xmlReader">An XmlReader instance</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> internal LineStringFactory(XmlReader xmlReader, WfsFeatureTypeInfo featureTypeInfo) : base(xmlReader, featureTypeInfo) { _FeatureNode.IsActive = false; }
/// <summary> /// Initializes a new instance of the <see cref="LineStringFactory"/> class. /// </summary> /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param> /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="labelInfo">A FeatureDataTable for labels</param> internal LineStringFactory(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo, FeatureDataTable labelInfo) : base(httpClientUtil, featureTypeInfo, labelInfo) { }
/// <summary> /// This method returns the query string for 'GetFeature'. /// </summary> /// <param name="featureTypeInfo">A <see cref="Wfs.WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param> /// <param name="boundingBox">The bounding box of the query</param> /// <param name="filter">An instance implementing <see cref="IFilter"/></param> /// <param name="loadAllElements">True to get all feature elements, false to get only geometry element</param> public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, Envelope boundingBox, IFilter filter, bool loadAllElements) { string qualification = string.IsNullOrEmpty(featureTypeInfo.Prefix) ? string.Empty : featureTypeInfo.Prefix + ":"; string filterString = string.Empty; if (filter != null) { filterString = filter.Encode(); filterString = filterString.Replace("<", "%3C"); filterString = filterString.Replace(">", "%3E"); filterString = filterString.Replace(" ", ""); filterString = filterString.Replace("*", "%2a"); filterString = filterString.Replace("#", "%23"); filterString = filterString.Replace("!", "%21"); } StringBuilder filterBuilder = new StringBuilder(); filterBuilder.Append("&FILTER=%3CFilter%20xmlns=%22" + Uri.EscapeDataString(NSOGC) + "%22%20xmlns:gml=%22" + Uri.EscapeDataString(NSGML) + "%22"); if (!string.IsNullOrEmpty(featureTypeInfo.Prefix)) { filterBuilder.Append("%20xmlns:" + featureTypeInfo.Prefix + "=%22" + Uri.EscapeDataString(featureTypeInfo.FeatureTypeNamespace) + "%22"); //added by PDD to get it to work for deegree default sample } filterBuilder.Append("%3E"); if (filter != null) { filterBuilder.Append("%3CAnd%3E"); } filterBuilder.Append("%3CBBOX%3E"); if (!loadAllElements) { filterBuilder.Append("%3CPropertyName%3E"); filterBuilder.Append(qualification); filterBuilder.Append(featureTypeInfo.Geometry._GeometryName); filterBuilder.Append("%3C/PropertyName%3E"); } filterBuilder.Append("%3Cgml:Envelope%20srsName='EPSG:" + featureTypeInfo.SRID + "'%3E"); filterBuilder.Append("%3Cgml:lowerCorner%3E"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MinX) + "%20"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MinY)); filterBuilder.Append("%3C/gml:lowerCorner%3E"); filterBuilder.Append("%3Cgml:upperCorner%3E"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MaxX) + "%20"); filterBuilder.Append(XmlConvert.ToString(boundingBox.MaxY)); filterBuilder.Append("%3C/gml:upperCorner%3E"); filterBuilder.Append("%3C/gml:Envelope%3E%3C/BBOX%3E"); filterBuilder.Append(filterString); if (filter != null) { filterBuilder.Append("%3C/And%3E"); } filterBuilder.Append("%3C/Filter%3E"); if (!string.IsNullOrEmpty(featureTypeInfo.Prefix)) { //TODO: reorganize: this is not a part of the filter and should be somewhere else. PDD. filterBuilder.Append("&NAMESPACE=xmlns(" + featureTypeInfo.Prefix + "=" + Uri.EscapeDataString(featureTypeInfo.FeatureTypeNamespace) + ")"); } return("?SERVICE=WFS&Version=1.1.0&REQUEST=GetFeature&TYPENAME=" + qualification + featureTypeInfo.Name + (loadAllElements ? "" : "&PROPERTYNAME=" + qualification + featureTypeInfo.Geometry._GeometryName) + "&SRSNAME=EPSG:" + featureTypeInfo.SRID + filterBuilder); }