基本原理:舍取法 代码: 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.Geometry; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Carto; namespace 舍取法在多边形内随机产生若干点 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.axMapControl1.LoadMxFile(@"F:/连续型随机变量的舍取法抽样/舍取法.mxd"); } private void Sample(IPolygon pPolygon, int num, IFeatureClass pFeatureClass) { IRelationalOperator pOprator = pPolygon as IRelationalOperator; int i = 0; IEnvelope pEnv = pPolygon.Envelope;//pPolygon的最小包络多边形 Random r = new Random(); double xMin = pEnv.XMin; double xMax = pEnv.XMax; double yMin = pEnv.YMin; double yMax = pEnv.YMax; IFeatureBuffer pFeatureBuffer = pFeatureClass.CreateFeatureBuffer(); IFeatureCursor pFeatureCursor = pFeatureClass.Insert(true); object featureOID; while (i < num) { IPoint pPoint = new PointClass(); pPoint.PutCoords(xMin + r.NextDouble() * (xMax - xMin), yMin + r.NextDouble() * (yMax - yMin)); if (pOprator.Contains(pPoint))//若在pPolygon内,则为有效随机点 { i++; pFeatureBuffer.Shape = pPoint as IPoint; pFeatureBuffer.set_Value(2, 0); featureOID = pFeatureCursor.InsertFeature(pFeatureBuffer); } else { pFeatureBuffer.Shape = pPoint as IPoint; pFeatureBuffer.set_Value(2, 1); featureOID = pFeatureCursor.InsertFeature(pFeatureBuffer); } } pFeatureCursor.Flush(); System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);//释放Cursor this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } private void button1_Click(object sender, EventArgs e) { IFeatureLayer pFeatureLayer1 = this.axMapControl1.get_Layer(1) as IFeatureLayer; IFeatureLayer pFeatureLayer0 = this.axMapControl1.get_Layer(0) as IFeatureLayer; IFeatureClass pFeatureClass1 = pFeatureLayer1.FeatureClass; IFeatureClass pFeatureClass0 = pFeatureLayer0.FeatureClass; IFeature pFeature = pFeatureClass1.GetFeature(0); IRelationalOperator pOprator = pFeature.Shape as IRelationalOperator; int num = int.Parse(this.textBox1.Text); this.Sample((IPolygon)pFeature.Shape, num, pFeatureClass0); } private void button2_Click(object sender, EventArgs e) { IFeatureLayer pFeatureLayer0 = this.axMapControl1.get_Layer(0) as IFeatureLayer; IFeatureClass pFeatureClass = pFeatureLayer0.FeatureClass; //while (pFeatureClass.FeatureCount(null) > 0) //{ // pFeatureClass.GetFeature(0).Delete(); //} //this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); IFeatureCursor pFC = pFeatureClass.Search(null, false); IFeature pFeature = pFC.NextFeature(); while (pFeature != null) { pFeature.Delete(); pFeature = pFC.NextFeature(); } this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } } } 结果: