ArcEngine获取外包矩形

 

 

      /// <summary>
        /// 获取单个要素的外包矩形
        /// </summary>
        /// <param name="pFeature"></param>
        /// <returns></returns>
        public IEnvelope GetEnvelope(IFeature pFeature)
        {
            IEnvelope pEnvelope = pFeature.Extent;
            return pEnvelope;
        }

        /// <summary>
        /// 通过ITopologicalOperator接口,获得包含几个或多个要素的外包矩形
        /// </summary>
        /// <param name="pGeometryCollection"></param>
        /// <returns></returns>
        public IEnvelope GetEnvelope(IGeometryCollection pGeometryCollection)
        {
            IPolygon pPolygon = new PolygonClass();
            ITopologicalOperator pTopo;
            pTopo = pPolygon as ITopologicalOperator;
            pTopo.ConstructUnion(pGeometryCollection as IEnumGeometry);
            IEnvelope pEnvelope = pPolygon.Envelope;
            return pEnvelope;
        }

        /// <summary>
        /// 通过ITopologicalOperator接口,获得包含几个或多个要素的外包矩形
        /// </summary>
        /// <param name="pGeometryCollection"></param>
        /// <returns></returns>
        public IEnvelope GetEnvelope(IFeatureClass featureClass, string whereCaluse = "1=1")
        {
            if (featureClass == null)
            { return null; }

            IGeoDataset geoDataset = featureClass as IGeoDataset;
            IGeometry geometryBag = new GeometryBagClass();
            ISpatialFilter queryFilter = new SpatialFilterClass();
            queryFilter.WhereClause = whereCaluse;
            geometryBag.SpatialReference = geoDataset.SpatialReference;
            IFeatureCursor featureCursor = featureClass.Search(queryFilter, false);
            IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;
            IFeature currentFeature = featureCursor.NextFeature();
            object missing = Type.Missing;
            int j = 0;
            while (currentFeature != null)
            {
                j++;
                geometryCollection.AddGeometry(currentFeature.Shape, ref missing, ref missing);
                currentFeature = featureCursor.NextFeature();
            }

            if (featureCursor != null)
                ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(featureCursor);

            ITopologicalOperator unionedPolygon = new PolygonClass();
            unionedPolygon.ConstructUnion(geometryBag as IEnumGeometry);

            return (unionedPolygon as IPolygon).Envelope;
        }

        /// <summary>
        /// 通过IGeoDataset接口,获得一个要素图层的外包矩形
        /// </summary>
        /// <param name="pFeatureClass"></param>
        /// <returns></returns>
        public IEnvelope GetEnvelope(IFeatureClass pFeatureClass)
        {
            IGeoDataset pGeoDataset;
            pGeoDataset = pFeatureClass as IGeoDataset;
            IEnvelope pEnvelope = pGeoDataset.Extent;
            return pEnvelope;
        }

 

posted @ 2019-05-14 10:23  ParanoiaApe  阅读(444)  评论(0)    收藏  举报