コード例 #1
0
ファイル: ShapeFileEx.cs プロジェクト: cugkgq/Project
        /// <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);
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        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;
        }
コード例 #6
0
ファイル: ShapeFileEx.cs プロジェクト: lishxi/_SharpMap
        /// <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);
        }
コード例 #7
0
        /// <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);
        }