用线切割面

来源:互联网 发布:软件设计师模拟考试 编辑:程序博客网 时间:2024/04/28 06:50

//不太常用,标记       

public IGeometryCollection CutPolygon(IPolygon polygon,IPolyline polyline)
        {
            if (polygon == null || polyline == null)
            {
                return null;
            }
            ITopologicalOperator4 topologicalOperator4 = polygon as ITopologicalOperator4; // Dynamic Cast
            IGeometryCollection geometryCollection = topologicalOperator4.Cut2(polyline);
            return geometryCollection;
       }

//大数据量计算时,速度不理想

        public void SplitPolygonFeaturesByLine(IFeatureClass polygonFC, IFeatureClass lineFC)
        {
            if (polygonFC.ShapeType != esriGeometryType.esriGeometryPolygon)
            {
                MessageBox.Show("The target layer is not a polygon layer.");
                return;
            }
            IFeatureCursor lineFeatureCursor = lineFC.Search(null, false);

            IGeoDataset geoDS = polygonFC as IGeoDataset;
            IEnvelope processingBounds = geoDS.Extent;

            //Define an IInValidArea object.
            IInvalidArea invalidArea = new InvalidAreaClass();

            //Define a construct feature object.
            IFeatureConstruction featureConstruction = new FeatureConstructionClass();

            //Start an edit session.
            IDataset dataset = polygonFC as IDataset;
            IWorkspace workspace = dataset.Workspace;
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            if (workspaceEdit.IsBeingEdited() != true)
            {
                workspaceEdit.StartEditing(true);
                workspaceEdit.StartEditOperation();
            }
            try
            {
                featureConstruction.SplitPolygonsWithLinesFromCursor(null, polygonFC, processingBounds, lineFeatureCursor, invalidArea, -1);
                workspaceEdit.StopEditOperation();
                workspaceEdit.StopEditing(true);
            }

            catch (Exception e)
            {
                //Abort the edit operation if errors are detected.
                MessageBox.Show("Construct polygons failed. " + e.Message);
                workspaceEdit.AbortEditOperation();
            }
        }