merge2 改进

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        private IFeatureWorkspace pCommonFeaureWorkspace = null;
        private IFeatureClass pCommonFeatureClass = null;   
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IPropertySet pPS = new PropertySetClass();
            IWorkspaceFactory pWF = new SdeWorkspaceFactoryClass();
            pPS.SetProperty("Server", "8B63691CDAE4488");
            pPS.SetProperty("Instance", "5159");
            pPS.SetProperty("Database", "TestElementEdit");
            pPS.SetProperty("User", "sde");
            pPS.SetProperty("Password", "zhangjun1130");
            pPS.SetProperty("Version", "sde.default");
            IWorkspace pWs = pWF.Open(pPS, 0);
            IFeatureWorkspace pFWs = pWs as IFeatureWorkspace;
            pCommonFeaureWorkspace = pFWs;

            IFeatureClass pFC = pFWs.OpenFeatureClass("ElementEdit");
            pCommonFeatureClass = pFC;
            IFeatureLayer pFL = new FeatureLayerClass();
            pFL.FeatureClass = pFC;

            axMapControl1.AddLayer(pFL);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pCommonFeaureWorkspace;
            pWorkspaceEdit.StartEditing(true);
            pWorkspaceEdit.StartEditOperation();

            IFeatureSelection pFS = (IFeatureSelection)axMapControl1.Map.get_Layer(0);
            pFS.SelectFeatures(null, esriSelectionResultEnum.esriSelectionResultNew, false);

            ISelection pS = axMapControl1.Map.FeatureSelection;
            IEnumFeature pEF = (IEnumFeature)pS;

            IFeature pFeatureFirst = pEF.Next();
            Console.WriteLine(pFeatureFirst.get_Value(0).ToString());

            IGeometry pGeometryFirst = pFeatureFirst.Shape;
            ITopologicalOperator2 pTopOperatorFirst = (ITopologicalOperator2)pGeometryFirst;
            IRelationalOperator pRelOperatorFirst = (IRelationalOperator)pGeometryFirst;
            pTopOperatorFirst.IsKnownSimple_2 = false;
            pTopOperatorFirst.Simplify();
            pGeometryFirst.SnapToSpatialReference();

            IGeometry pGeometrySecond;
            IFeature pFeatureSecond = pEF.Next();

            while (pFeatureSecond != null)
            {
                pGeometrySecond = pFeatureSecond.ShapeCopy;
                ITopologicalOperator2 pTopOperatorSecond = (ITopologicalOperator2)pGeometrySecond;
                pTopOperatorSecond.IsKnownSimple_2 = false;
                pTopOperatorSecond.Simplify();
                pGeometrySecond.SnapToSpatialReference();

                Console.WriteLine(pFeatureSecond.get_Value(0).ToString());

                if (pRelOperatorFirst.Overlaps(pGeometrySecond) == true)
                {
                    pGeometryFirst = pTopOperatorFirst.Union(pGeometrySecond);
                    pFeatureSecond.Delete();
                }

                pFeatureSecond = pEF.Next();
            }

            pTopOperatorFirst.IsKnownSimple_2 = false;
            pTopOperatorFirst.Simplify();
            pFeatureFirst.Shape = pGeometryFirst;
            pFeatureFirst.Store();


            pWorkspaceEdit.StopEditOperation();
            pWorkspaceEdit.StopEditing(true);
            axMapControl1.Refresh();
        }
    }
}
原文地址:https://www.cnblogs.com/zhangjun1130/p/1454533.html