/// <summary> /// Returns the data associated with all the geometries that are intersected by 'geom'. /// </summary> /// <param name="geom">The geometry.</param> /// <param name="ds">The <see cref="FeatureDataSet"/> to fill data into.</param> public override void ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) { //Use the spatial index to get a list of features whose boundingbox intersects bbox var objectlist = GetObjectIDsInView(geom.GetBoundingBox()); if (objectlist.Count == 0) { return; } var dt = DbaseFile.NewTable; var preparedGeometry = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory() .Create(Converters.NTS.GeometryConverter.ToNTSGeometry(geom, _factory)); for (int i = 0; i < objectlist.Count; i++) { var testGeom = GetGeometryByID(objectlist[i]); var testNtsGeom = Converters.NTS.GeometryConverter.ToNTSGeometry(testGeom, _factory); if (preparedGeometry.Intersects(testNtsGeom)) { var fdr = GetFeature(objectlist[i], dt); if (fdr != null) { dt.AddRow(fdr); } } } if (dt.Rows.Count > 0) { ds.Tables.Add(dt); } }
/// <summary> /// Throws an NotSupportedException. Attribute data is not supported by this datasource /// </summary> /// <param name="geom"></param> /// <param name="ds">FeatureDataSet to fill data into</param> public void ExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) { FeatureDataTable fdt; lock (_featuresLock) fdt = _features.Clone(); fdt.BeginLoadData(); var pg = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory().Create(geom); foreach (var idFeature in EnumerateFeatures(geom.EnvelopeInternal)) { var fdr = idFeature.Value; if (pg.Intersects(fdr.Geometry)) { fdt.LoadDataRow(fdr.ItemArray, true); var tmpGeom = fdr.Geometry; if (tmpGeom != null) { ((FeatureDataRow)fdt.Rows[fdt.Rows.Count - 1]).Geometry = (IGeometry)tmpGeom.Clone(); } } } fdt.EndLoadData(); ds.Tables.Add(fdt); }
public static List <IFeature> Select(this IFeatureSet self, Shape shape, SpatialPredicate predicate = SpatialPredicate.Intersects) { var result = new List <IFeature>(); var pg = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory().Create(shape.ToGeoAPI()); foreach (var feat in self.Features) { var valid = false; var tryShape = feat.ToShape().ToGeoAPI(); switch (predicate) { case SpatialPredicate.Intersects: valid = pg.Intersects(tryShape); break; case SpatialPredicate.Overlaps: valid = pg.Overlaps(tryShape); break; case SpatialPredicate.Touches: valid = pg.Touches(tryShape); break; case SpatialPredicate.Within: valid = pg.Within(tryShape); break; case SpatialPredicate.Contains: valid = pg.Contains(tryShape); break; case SpatialPredicate.ContainsProperly: valid = pg.ContainsProperly(tryShape); break; case SpatialPredicate.Covers: valid = pg.Covers(tryShape); break; case SpatialPredicate.CoveredBy: valid = pg.CoveredBy(tryShape); break; case SpatialPredicate.Disjoint: valid = pg.Disjoint(tryShape); break; } if (valid) { result.Add(feat); } } return(result); }
/// <summary> /// Throws an NotSupportedException. Attribute data is not supported by this datasource /// </summary> /// <param name="geom"></param> /// <param name="ds">FeatureDataSet to fill data into</param> public void ExecuteIntersectionQuery(IGeometry geom, IFeatureCollectionSet ds, CancellationToken?cancellationToken = null) { IFeatureCollection fdt; lock (_featuresLock) fdt = _features.Clone(); var pg = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory().Create(geom); fdt.AddRange(EnumerateFeatures(pg)); ds.Add(fdt); }
public static List<IFeature> Select(this IFeatureSet self, Shape shape, SpatialPredicate predicate = SpatialPredicate.Intersects) { var result = new List<IFeature>(); var pg = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory().Create(shape.ToGeoAPI()); foreach (var feat in self.Features) { var valid = false; var tryShape = feat.ToShape().ToGeoAPI(); switch (predicate) { case SpatialPredicate.Intersects: valid = pg.Intersects(tryShape); break; case SpatialPredicate.Overlaps: valid = pg.Overlaps(tryShape); break; case SpatialPredicate.Touches: valid = pg.Touches(tryShape); break; case SpatialPredicate.Within: valid = pg.Within(tryShape); break; case SpatialPredicate.Contains: valid = pg.Contains(tryShape); break; case SpatialPredicate.ContainsProperly: valid = pg.ContainsProperly(tryShape); break; case SpatialPredicate.Covers: valid = pg.Covers(tryShape); break; case SpatialPredicate.CoveredBy: valid = pg.CoveredBy(tryShape); break; case SpatialPredicate.Disjoint: valid = pg.Disjoint(tryShape); break; } if (valid) result.Add(feat); } return result; }
/// <summary> /// Returns the data associated with all the geometries that are intersected by 'geom'. /// </summary> /// <param name="geom">The geometry.</param> /// <param name="ds">The <see cref="FeatureDataSet"/> to fill data into.</param> public override void ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) { //Use the spatial index to get a list of features whose boundingbox intersects bbox var objectlist = GetObjectIDsInView(geom.GetBoundingBox()); if (objectlist.Count == 0) return; var dt = DbaseFile.NewTable; var preparedGeometry = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory() .Create(Converters.NTS.GeometryConverter.ToNTSGeometry(geom, _factory)); for (int i = 0; i < objectlist.Count; i++) { var testGeom = GetGeometryByID(objectlist[i]); var testNtsGeom = Converters.NTS.GeometryConverter.ToNTSGeometry(testGeom, _factory); if (preparedGeometry.Intersects(testNtsGeom)) { var fdr = GetFeature(objectlist[i], dt); if (fdr != null) dt.AddRow(fdr); } } if (dt.Rows.Count > 0) ds.Tables.Add(dt); }
/// <summary> /// Throws an NotSupportedException. Attribute data is not supported by this datasource /// </summary> /// <param name="geom"></param> /// <param name="ds">FeatureDataSet to fill data into</param> public void ExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) { FeatureDataTable fdt; lock (_featuresLock) fdt = _features.Clone(); fdt.BeginLoadData(); var pg = new NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory().Create(geom); foreach (var idFeature in EnumerateFeatures(geom.EnvelopeInternal)) { var fdr = idFeature.Value; if (pg.Intersects(fdr.Geometry)) { fdt.LoadDataRow(fdr.ItemArray, true); var tmpGeom = fdr.Geometry; if (tmpGeom != null) ((FeatureDataRow)fdt.Rows[fdt.Rows.Count - 1]).Geometry = (IGeometry)tmpGeom.Clone(); } } fdt.EndLoadData(); ds.Tables.Add(fdt); }