public Features ExecuteIntersectionQuery(BoundingBox bbox) { if (_featureTypeInfo == null) { return(null); } var features = new Features(); string geometryTypeString = _featureTypeInfo.Geometry.GeometryType; GeometryFactory geomFactory = null; if (!string.IsNullOrEmpty(_label)) { _featureTypeInfo.LableField = _label; _quickGeometries = false; } // Configuration for GetFeature request */ var config = new WFSClientHttpConfigurator(_textResources); config.ConfigureForWfsGetFeatureRequest(_httpClientUtil, _featureTypeInfo, _label, bbox, _ogcFilter, _getFeatureGetRequest); try { switch (geometryTypeString) { /* Primitive geometry elements */ // GML2 case "PointPropertyType": geomFactory = new PointFactory(_httpClientUtil, _featureTypeInfo); break; // GML2 case "LineStringPropertyType": geomFactory = new LineStringFactory(_httpClientUtil, _featureTypeInfo); break; // GML2 case "PolygonPropertyType": geomFactory = new PolygonFactory(_httpClientUtil, _featureTypeInfo); break; // GML3 case "CurvePropertyType": geomFactory = new LineStringFactory(_httpClientUtil, _featureTypeInfo); break; // GML3 case "SurfacePropertyType": geomFactory = new PolygonFactory(_httpClientUtil, _featureTypeInfo); break; /* Aggregate geometry elements */ // GML2 case "MultiPointPropertyType": if (_multiGeometries) { geomFactory = new MultiPointFactory(_httpClientUtil, _featureTypeInfo); } else { geomFactory = new PointFactory(_httpClientUtil, _featureTypeInfo); } break; // GML2 case "MultiLineStringPropertyType": if (_multiGeometries) { geomFactory = new MultiLineStringFactory(_httpClientUtil, _featureTypeInfo); } else { geomFactory = new LineStringFactory(_httpClientUtil, _featureTypeInfo); } break; // GML2 case "MultiPolygonPropertyType": if (_multiGeometries) { geomFactory = new MultiPolygonFactory(_httpClientUtil, _featureTypeInfo); } else { geomFactory = new PolygonFactory(_httpClientUtil, _featureTypeInfo); } break; // GML3 case "MultiCurvePropertyType": if (_multiGeometries) { geomFactory = new MultiLineStringFactory(_httpClientUtil, _featureTypeInfo); } else { geomFactory = new LineStringFactory(_httpClientUtil, _featureTypeInfo); } break; // GML3 case "MultiSurfacePropertyType": if (_multiGeometries) { geomFactory = new MultiPolygonFactory(_httpClientUtil, _featureTypeInfo); } else { geomFactory = new PolygonFactory(_httpClientUtil, _featureTypeInfo); } break; // .e.g. 'gml:GeometryAssociationType' or 'GeometryPropertyType' //It's better to set the geometry type manually, if it is known... default: geomFactory = new UnspecifiedGeometryFactory_WFS1_0_0_GML2(_httpClientUtil, _featureTypeInfo, _multiGeometries, _quickGeometries); break; } var geoms = geomFactory.CreateGeometries(features); geomFactory.Dispose(); return(features); } // Free resources (net connection of geometry factory) finally { if (geomFactory != null) { geomFactory.Dispose(); } } }
public System.Collections.ObjectModel.Collection <SharpMap.Geometries.Geometry> GetGeometriesInView(SharpMap.Geometries.BoundingBox bbox) { if (_FeatureTypeInfo == null) { return(null); } System.Collections.ObjectModel.Collection <Geometry> geoms = new System.Collections.ObjectModel.Collection <Geometry>(); string geometryTypeString = _FeatureTypeInfo.Geometry._GeometryType; GeometryFactory geomFactory = null; if (!string.IsNullOrEmpty(_Label)) { _LabelInfo = new FeatureDataTable(); _LabelInfo.Columns.Add(_Label); // Turn off quick geometries, if a label is applied... _QuickGeometries = false; } // Configuration for GetFeature request */ WFSClientHTTPConfigurator config = new WFSClientHTTPConfigurator(_TextResources); config.configureForWfsGetFeatureRequest(_HttpClientUtil, _FeatureTypeInfo, _Label, bbox, _OGCFilter, _GetFeatureGETRequest); try { switch (geometryTypeString) { /* Primitive geometry elements */ // GML2 case "PointPropertyType": geomFactory = new PointFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); break; // GML2 case "LineStringPropertyType": geomFactory = new LineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); break; // GML2 case "PolygonPropertyType": geomFactory = new PolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); break; // GML3 case "CurvePropertyType": geomFactory = new LineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); break; // GML3 case "SurfacePropertyType": geomFactory = new PolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); break; /* Aggregate geometry elements */ // GML2 case "MultiPointPropertyType": if (_MultiGeometries) { geomFactory = new MultiPointFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } else { geomFactory = new PointFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } break; // GML2 case "MultiLineStringPropertyType": if (_MultiGeometries) { geomFactory = new MultiLineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } else { geomFactory = new LineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } break; // GML2 case "MultiPolygonPropertyType": if (_MultiGeometries) { geomFactory = new MultiPolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } else { geomFactory = new PolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } break; // GML3 case "MultiCurvePropertyType": if (_MultiGeometries) { geomFactory = new MultiLineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } else { geomFactory = new LineStringFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } break; // GML3 case "MultiSurfacePropertyType": if (_MultiGeometries) { geomFactory = new MultiPolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } else { geomFactory = new PolygonFactory(_HttpClientUtil, _FeatureTypeInfo, _LabelInfo); } break; // .e.g. 'gml:GeometryAssociationType' or 'GeometryPropertyType' //It's better to set the geometry type manually, if it is known... default: geomFactory = new UnspecifiedGeometryFactory_WFS1_0_0_GML2(_HttpClientUtil, _FeatureTypeInfo, _MultiGeometries, _QuickGeometries, _LabelInfo); geoms = geomFactory.createGeometries(); return(geoms); } geoms = _QuickGeometries ? geomFactory.createQuickGeometries(geometryTypeString) : geomFactory.createGeometries(); geomFactory.Dispose(); return(geoms); } // Free resources (net connection of geometry factory) finally { geomFactory.Dispose(); } }