/// <summary> /// Gets the features within the specified <see cref="GeoAPI.Geometries.Envelope"/> /// </summary> /// <param name="bbox"></param> /// <returns>Features within the specified <see cref="GeoAPI.Geometries.Envelope"/></returns> public Collection<IGeometry> GetGeometriesInView(Envelope bbox) { if (_featureTypeInfo == null) return null; var geoms = new Collection<IGeometry>(); 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 { if (geomFactory != null) { geomFactory.Dispose(); } } }
/// <summary> /// Gets the features within the specified <see cref="GeoAPI.Geometries.Envelope"/> /// </summary> /// <param name="bbox"></param> /// <returns>Features within the specified <see cref="GeoAPI.Geometries.Envelope"/></returns> public IEnumerable<IGeometry> GetGeometriesInView(Envelope bbox, CancellationToken? cancellationToken = null) { if (_featureTypeInfo == null) return null; var geoms = new Collection<IGeometry>(); string geometryTypeString = _featureTypeInfo.Geometry._GeometryType; GeometryFactory geomFactory = null; if (!string.IsNullOrEmpty(_label)) { var ff = FeatureFactory.CreateInt32(GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(SRID), new FeatureAttributeDefinition { AttributeName = "Label", Default = string.Empty, AttributeType = typeof(string), IsNullable = true }); _labelInfo = new FeatureCollection<int>(ff); // Turn off quick geometries, if a label is applied... _quickGeometries = false; } // Configuration for GetFeatureByOid 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 { if (geomFactory != null) { geomFactory.Dispose(); } } }