/// <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; _HttpClientUtil = httpClientUtil; createReader(httpClientUtil); try { if (labelInfo != null) { _LabelInfo = labelInfo; _LabelNode = new PathNode(_FeatureTypeInfo.FeatureTypeNamespace, _LabelInfo.Columns[0].ColumnName, (NameTable)_XmlReader.NameTable); } } 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; _XmlReader = xmlReader; initializePathNodes(); initializeSeparators(); }
/// <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> public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, BoundingBox boundingBox, IFilter filter) { 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" + NSOGC + "%22%20xmlns:gml=%22" + NSGML + "%22"); if (!string.IsNullOrEmpty(featureTypeInfo.Prefix)) { filterBuilder.Append("%20xmlns:" + featureTypeInfo.Prefix + "=%22" + 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%3CPropertyName%3E"); filterBuilder.Append(qualification); filterBuilder.Append(featureTypeInfo.Geometry._GeometryName); filterBuilder.Append("%3C/PropertyName%3E%3Cgml:Box%20srsName='EPSG:" + featureTypeInfo.SRID + "'%3E"); filterBuilder.Append("%3Cgml:coordinates%3E"); filterBuilder.Append(XmlConvert.ToString(boundingBox.Left) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.Bottom) + "%20"); filterBuilder.Append(XmlConvert.ToString(boundingBox.Right) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.Top)); filterBuilder.Append("%3C/gml:coordinates%3E%3C/gml:Box%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 + "=" + featureTypeInfo.FeatureTypeNamespace + ")"); } return("?SERVICE=WFS&Version=1.1.0&REQUEST=GetFeature&TYPENAME=" + qualification + featureTypeInfo.Name + "&PROPERTYNAME=" + qualification + featureTypeInfo.Geometry._GeometryName + "&SRS=" + featureTypeInfo.SRID + filterBuilder); }
/// <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 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> public byte[] GetFeaturePOSTRequest(WfsFeatureTypeInfo featureTypeInfo, string labelProperty, BoundingBox boundingBox, IFilter filter) { 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); xWriter.WriteElementString("PropertyName", qualification + featureTypeInfo.Geometry._GeometryName); if (!string.IsNullOrEmpty(labelProperty)) { xWriter.WriteElementString("PropertyName", qualification + labelProperty); } xWriter.WriteStartElement("Filter", NSOGC); xWriter.WriteStartElement("BBOX"); 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.Left) + "," + XmlConvert.ToString(boundingBox.Bottom) + " " + XmlConvert.ToString(boundingBox.Right) + "," + XmlConvert.ToString(boundingBox.Top)); 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> /// 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> public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, BoundingBox boundingBox, IFilter filter) { 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" + NSOGC + "%22%20xmlns:gml=%22" + NSGML + "%22%3E%3CBBOX%3E%3CPropertyName%3E"); filterBuilder.Append(qualification); filterBuilder.Append(featureTypeInfo.Geometry._GeometryName); filterBuilder.Append("%3C/PropertyName%3E%3Cgml:Box%20srsName=%22EPSG:" + featureTypeInfo.SRID + "%22%3E"); filterBuilder.Append("%3Cgml:coordinates%3E"); filterBuilder.Append(XmlConvert.ToString(boundingBox.Left) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.Bottom) + "%20"); filterBuilder.Append(XmlConvert.ToString(boundingBox.Right) + ","); filterBuilder.Append(XmlConvert.ToString(boundingBox.Top)); 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 + "&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) { }