生成环

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataManagementTools;



namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string[][] strXY;
        string[] XY;
        string ScaleStr = "+(30,30;120,30;120,15;30,15)-(50,25;80,25;80,20;50,20)-(90,20;95,20;95,18;90,18)";
        IFeatureClass pPublicFeatureClass;
        IFeatureWorkspace pPublicFeatureWorkspace;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IAoInitialize pAo = new AoInitializeClass();
            pAo.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

            IWorkspaceFactory pSdeWorkspaceFactory = new SdeWorkspaceFactory();
            IPropertySet pPropertySet = new PropertySetClass();
            pPropertySet.SetProperty("Server", "siwei-gr7bzmd3q");
            pPropertySet.SetProperty("Instance", "esri_sde2");
            pPropertySet.SetProperty("Database", "sde2");
            pPropertySet.SetProperty("user", "sde");
            pPropertySet.SetProperty("password", "zhangjun1130");
            pPropertySet.SetProperty("version", "sde.DEFAULT");
            IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pSdeWorkspaceFactory.Open(pPropertySet, 0);
            IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass("sde2.SDE.Ring");
            pPublicFeatureClass = pFeatureClass;
            pPublicFeatureWorkspace = pFeatureWorkspace;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int n = 1;
            int begin;
            int end;
            string[] split2;
            string[] split1;
            string sub = string.Empty;

            for (int i = 1; i <= n; i++)
            {

                split1 = ScaleStr.Split(new char[] { '+', '-' });

                strXY = new string[split1.Length - 1][];

                for (int k = 0; k < split1.Length - 1; k++)
                {
                    string a = split1[k + 1];
                    if (a.Trim() != "")
                    {
                        begin = a.IndexOf('(');
                        end = a.IndexOf(')');
                        sub = a.Substring(begin + 1, end - begin - 1);
                        split2 = sub.Split(new char[] { ';' });
                        strXY[k] = new string[split2.Length];
                        for (int j = 0; j < split2.Length; j++)
                        {
                            strXY[k][j] = split2[j];  //返回需要的数组,x,y对
                        }
                    }

                }

            }


            IPoint pPoint;
            IPolygon pPolygon1 = new PolygonClass();
            IPointCollection pPointCollection1 = (IPointCollection)pPolygon1;
            ITopologicalOperator2 pTopPoerator1 = (ITopologicalOperator2)pPolygon1;

            object _missing = Type.Missing;
            double x, y;
            for (int i = 0; i < strXY[0].Length; i++)
            {
                XY = strXY[0][i].Split(new char[] { ',' });
                x = double.Parse(XY[0]);
                y = double.Parse(XY[1]);
                pPoint = new PointClass();
                pPoint.PutCoords(x, y);
                pPointCollection1.AddPoint(pPoint, ref _missing, ref _missing);
            }
            pPolygon1.Close();
            pTopPoerator1.IsKnownSimple_2 = false;
            pTopPoerator1.Simplify();
            pPolygon1.SnapToSpatialReference();


            IPolygon pPolygon2 = new PolygonClass();
            IPointCollection pPointCollection2 = (IPointCollection)pPolygon2;
            ITopologicalOperator2 pTopPoerator2 = (ITopologicalOperator2)pPolygon2;
            for (int i = 0; i < strXY[1].Length; i++)
            {
                XY = strXY[1][i].Split(new char[] { ',' });
                x = double.Parse(XY[0]);
                y = double.Parse(XY[1]);
                pPoint = new PointClass();
                pPoint.PutCoords(x, y);
                pPointCollection2.AddPoint(pPoint, ref _missing, ref _missing);
            }
            pPolygon2.Close();
            pTopPoerator2.IsKnownSimple_2 = false;
            pTopPoerator2.Simplify();
            pPolygon2.SnapToSpatialReference();


            IPolygon pPolygon3 = new PolygonClass();
            IPointCollection pPointCollection3 = (IPointCollection)pPolygon3;
            ITopologicalOperator2 pTopPoerator3 = (ITopologicalOperator2)pPolygon3;
            for (int i = 0; i < strXY[2].Length; i++)
            {
                XY = strXY[2][i].Split(new char[] { ',' });
                x = double.Parse(XY[0]);
                y = double.Parse(XY[1]);
                pPoint = new PointClass();
                pPoint.PutCoords(x, y);
                pPointCollection3.AddPoint(pPoint, ref _missing, ref _missing);
            }
            pPolygon3.Close();
            pTopPoerator3.IsKnownSimple_2 = false;
            pTopPoerator3.Simplify();
            pPolygon3.SnapToSpatialReference();




            IPolygon pGeometry = (IPolygon)pTopPoerator1.Difference(pPolygon2);
            pGeometry = (IPolygon)(pGeometry as ITopologicalOperator).Difference(pPolygon3);



            IFeature pFeature=null;
            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pPublicFeatureWorkspace;
            pWorkspaceEdit.StartEditing(true);
            pWorkspaceEdit.StartEditOperation();

            #region 使用FeatureBuffer的方法成功
            IFeatureBuffer pFeatureBuffer = pPublicFeatureClass.CreateFeatureBuffer();
            IFeatureCursor pFeatureCursor = pPublicFeatureClass.Insert(true);
            
            
            //目前之设置几何字段
            pFeatureBuffer.Shape = pGeometry;
            pFeatureCursor.InsertFeature(pFeatureBuffer);
            pFeatureCursor.Flush();
            #endregion 5句话

            #region //使用CreateFeature的方法成功
            //pFeature =pPublicFeatureClass.CreateFeature();
            //pFeature.Shape = pPolygon;
            //pFeature.Store();
            #endregion 3句话



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