⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cs

📁 Tin的建立
💻 CS
📖 第 1 页 / 共 2 页
字号:
                button3.Enabled = true;
                button5.Enabled = true;


            }
            catch
            {
                MessageBox.Show("读取点数据时出现错误,请确定您的ShapeFile文件中的点的数据在第一个Layer的SHAPE域中", "警告");
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = false;

            }
        }

        private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
            IPoint nowmouse = axMapControl1.ToMapPoint(e.x, e.y);
            label1.Text = "X:" + Convert.ToString(nowmouse.X) + ",Y:" + Convert.ToString(nowmouse.Y);
        }

        public static IFeatureClass CreateFeatureClass(object objectWorkspace,
                                     string name,
                                     ISpatialReference spatialReference,
                                     esriFeatureType featureType,
                                     esriGeometryType geometryType,
                                     IFields fields,
                                     UID uidCLSID,
                                     UID uidCLSEXT,
                                     string configWord)
        {
            // Check for invalid parameters.
            if (objectWorkspace == null)
            {
                throw (new Exception("[objectWorkspace] cannot be null"));
            }
            if (!((objectWorkspace is IWorkspace) ||
               (objectWorkspace is IFeatureDataset)))
            {
                throw (new Exception("[objectWorkspace] must be IWorkspace or IFeatureDataset"));
            }
            if (name == "")
            {
                throw (new Exception("[name] cannot be empty"));
            }
            if ((objectWorkspace is IWorkspace) && (spatialReference == null))
            {
                throw (new Exception("[spatialReference] cannot be null for StandAlong FeatureClasses"));
            }

            // Set ClassID (if Null)
            if (uidCLSID == null)
            {
                uidCLSID = new UIDClass();
                switch (featureType)
                {
                    case (esriFeatureType.esriFTSimple):
                        uidCLSID.Value = "{52353152-891A-11D0-BEC6-00805F7C4268}";
                        break;
                    case (esriFeatureType.esriFTSimpleJunction):
                        geometryType = esriGeometryType.esriGeometryPoint;
                        uidCLSID.Value = "{CEE8D6B8-55FE-11D1-AE55-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTComplexJunction):
                        uidCLSID.Value = "{DF9D71F4-DA32-11D1-AEBA-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTSimpleEdge):
                        geometryType = esriGeometryType.esriGeometryPolyline;
                        uidCLSID.Value = "{E7031C90-55FE-11D1-AE55-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTComplexEdge):
                        geometryType = esriGeometryType.esriGeometryPolyline;
                        uidCLSID.Value = "{A30E8A2A-C50B-11D1-AEA9-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTAnnotation):
                        geometryType = esriGeometryType.esriGeometryPolygon;
                        uidCLSID.Value = "{E3676993-C682-11D2-8A2A-006097AFF44E}";
                        break;
                    case (esriFeatureType.esriFTDimension):
                        geometryType = esriGeometryType.esriGeometryPolygon;
                        uidCLSID.Value = "{496764FC-E0C9-11D3-80CE-00C04F601565}";
                        break;
                }
            }

            // Set uidCLSEXT (if Null)
            if (uidCLSEXT == null)
            {
                switch (featureType)
                {
                    case (esriFeatureType.esriFTAnnotation):
                        uidCLSEXT = new UIDClass();
                        uidCLSEXT.Value = "{24429589-D711-11D2-9F41-00C04F6BC6A5}";
                        break;
                    case (esriFeatureType.esriFTDimension):
                        uidCLSEXT = new UIDClass();
                        uidCLSEXT.Value = "{48F935E2-DA66-11D3-80CE-00C04F601565}";
                        break;
                }
            }

            // Add Fields
            if (fields == null)
            {
                // Create fields collection
                fields = new FieldsClass();
                IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

                // Create the geometry field
                IGeometryDef geometryDef = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

                // Assign Geometry Definition
                geometryDefEdit.GeometryType_2 = geometryType;
                geometryDefEdit.GridCount_2 = 1;
                geometryDefEdit.set_GridSize(0, 0.5);
                geometryDefEdit.AvgNumPoints_2 = 2;
                geometryDefEdit.HasM_2 = false;
                geometryDefEdit.HasZ_2 = true;
                if (objectWorkspace is IWorkspace)
                {
                    // If this is a STANDALONE FeatureClass then add spatial reference.
                    geometryDefEdit.SpatialReference_2 = spatialReference;
                }

                // Create OID Field
                IField fieldOID = new FieldClass();
                IFieldEdit fieldEditOID = (IFieldEdit)fieldOID;
                fieldEditOID.Name_2 = "OBJECTID";
                fieldEditOID.AliasName_2 = "OBJECTID";
                fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
                fieldsEdit.AddField(fieldOID);

                // Create Geometry Field
                IField fieldShape = new FieldClass();
                IFieldEdit fieldEditShape = (IFieldEdit)fieldShape;
                fieldEditShape.Name_2 = "SHAPE";
                fieldEditShape.AliasName_2 = "SHAPE";
                fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;
                fieldEditShape.GeometryDef_2 = geometryDef;
                fieldsEdit.AddField(fieldShape);
            }

            // Locate Shape Field
            string stringShapeFieldName = "";
            for (int i = 0; i <= fields.FieldCount - 1; i++)
            {
                if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    stringShapeFieldName = fields.get_Field(i).Name;
                    break;
                }
            }
            if (stringShapeFieldName == "")
            {
                throw (new Exception("Cannot locate geometry field in FIELDS"));
            }

            IFeatureClass featureClass = null;

            if (objectWorkspace is IWorkspace)
            {
                // Create a STANDALONE FeatureClass
                IWorkspace workspace = (IWorkspace)objectWorkspace;
                IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

                featureClass = featureWorkspace.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT,
                                                                   featureType, stringShapeFieldName,
                                                                   configWord);
            }
            else if (objectWorkspace is IFeatureDataset)
            {
                IFeatureDataset featureDataset = (IFeatureDataset)objectWorkspace;
                featureClass = featureDataset.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT,
                                                                 featureType, stringShapeFieldName,
                                                                 configWord);
            }

            // Return FeatureClass
            return featureClass;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            sanjiao = true;
            ExportTheResult.RunWorkerAsync();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            FindShp.ShowDialog();
            filename = FindShp.FileName;
            if (filename == string.Empty)
            {
                MessageBox.Show("您没有选择一个Shape文件");
                return;
            }
            axMapControl1.AddShapeFile(filename.Substring(0, filename.LastIndexOf('\\') + 1), filename.Substring(filename.LastIndexOf('\\') + 1, filename.Length - filename.LastIndexOf('\\') - 1));

        }

        private void ExportTheResult_DoWork(object sender, DoWorkEventArgs e)
        {
            string title="";
            int step = 0;
            IWorkspaceFactory shapeFileFactory = new ShapefileWorkspaceFactory();
            IWorkspace temp1 = shapeFileFactory.OpenFromFile(filename.Substring(0, filename.LastIndexOf('\\') + 1), 0);
            IFeatureWorkspace featureWksp = (IFeatureWorkspace)temp1;
            if(sanjiao) title="sanjiaowang"; else title="duobianxing";
            IFeatureClass Ftemp = CreateFeatureClass((object)featureWksp, title+(new Random()).Next().ToString(), new UnknownCoordinateSystemClass(), esriFeatureType.esriFTSimple, esriGeometryType.esriGeometryPolyline, null, null, null, null);
            IFeature res;
            if (sanjiao)
            {
                foreach (DTiangle temp in test.TriangleList)
                {
                    ESRI.ArcGIS.Geometry.Point now1 = new ESRI.ArcGIS.Geometry.PointClass();
                    now1.X = temp.point1.x;
                    now1.Y = temp.point1.y;
                    now1.Z = 10;
                    ESRI.ArcGIS.Geometry.Point now2 = new ESRI.ArcGIS.Geometry.PointClass();
                    now2.X = temp.point2.x;
                    now2.Y = temp.point2.y;
                    now2.Z = 10;
                    ESRI.ArcGIS.Geometry.Point now3 = new ESRI.ArcGIS.Geometry.PointClass();
                    now3.X = temp.point3.x;
                    now3.Y = temp.point3.y;
                    now3.Z = 10;

                    IPolyline newnew;
                    IPolyline newp = new PolylineClass();
                    newp.FromPoint = now1;
                    newp.ToPoint = now2;

                    res = Ftemp.CreateFeature();
                    newnew = (IPolyline)res.Shape;
                    newnew.FromPoint = now1;
                    newnew.ToPoint = now2;
                    res.Store();

                    res = Ftemp.CreateFeature();
                    newnew = (IPolyline)res.Shape;
                    newnew.FromPoint = now2;
                    newnew.ToPoint = now3;
                    res.Store();

                    res = Ftemp.CreateFeature();
                    newnew = (IPolyline)res.Shape;
                    newnew.FromPoint = now3;
                    newnew.ToPoint = now1;
                    res.Store();
                    step++;
                    ExportTheResult.ReportProgress((int)(((double)step / test.TriangleList.Count) * 100));

                }
            }
            else
            {
                foreach (DPoint temp in test.ThePoints)
                {
                    for (int m = 0; m < temp.UseThis.Count - 1; m++)
                    {
                        ESRI.ArcGIS.Geometry.Point now1 = new ESRI.ArcGIS.Geometry.PointClass();
                        now1.X = temp.UseThis[m].TheC.x;
                        now1.Y = temp.UseThis[m].TheC.y;
                        now1.Z = temp.UseThis[m].TheC.z;
                        ESRI.ArcGIS.Geometry.Point now2 = new ESRI.ArcGIS.Geometry.PointClass();
                        now2.X = temp.UseThis[m + 1].TheC.x;
                        now2.Y = temp.UseThis[m + 1].TheC.y;
                        now2.Z = temp.UseThis[m + 1].TheC.z;
                        IPolyline newnew;
                        res = Ftemp.CreateFeature();
                        newnew = (IPolyline)res.Shape;
                        newnew.FromPoint = now1;
                        newnew.ToPoint = now2;
                        res.Store();
                        
                    }
                    if (temp.IsClosed)
                    {
                        ESRI.ArcGIS.Geometry.Point nowlp = new ESRI.ArcGIS.Geometry.PointClass();
                        nowlp.X = temp.UseThis[temp.UseThis.Count - 1].TheC.x;
                        nowlp.Y = temp.UseThis[temp.UseThis.Count - 1].TheC.y;
                        nowlp.Z = temp.UseThis[temp.UseThis.Count - 1].TheC.z;
                        ESRI.ArcGIS.Geometry.Point nowfp = new ESRI.ArcGIS.Geometry.PointClass();
                        nowfp.X = temp.UseThis[0].TheC.x;
                        nowfp.Y = temp.UseThis[0].TheC.y;
                        nowfp.Z = temp.UseThis[0].TheC.z;
                        IPolyline newnew;
                        res = Ftemp.CreateFeature();
                        newnew = (IPolyline)res.Shape;
                        newnew.FromPoint = nowlp;
                        newnew.ToPoint = nowfp;
                        res.Store();
                    }
                    step++;
                    ExportTheResult.ReportProgress((int)(((double)step / test.ThePoints.Count) * 100));
                }

            }
        }

        private void ExportTheResult_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            jindu.Text = "线导出已完成%" + e.ProgressPercentage + ",请稍侯.....";
        }

        private void ExportTheResult_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            jindu.Text = "线导出已完成!!!";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            sanjiao = false;
            ExportTheResult.RunWorkerAsync();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Graphics Ddraw = this.CreateGraphics();
            double dqidianx = Convert.ToDouble(qidianx.Text);
            double dqidiany = Convert.ToDouble(qidiany.Text);
            double dzhongyuanx = Convert.ToDouble(zhongdianx.Text);
            double dzhongdiany = Convert.ToDouble(zhongdiany.Text);
            foreach (DPoint temp in points)
            {
                if (temp.x > dqidianx && temp.x < dzhongyuanx && temp.y < dqidiany && temp.y > dzhongdiany)
                {
                    ESRI.ArcGIS.Geometry.Point nowp = new ESRI.ArcGIS.Geometry.PointClass();
                    nowp.X = temp.x;
                    nowp.Y = temp.y;
                    nowp.Z = temp.z;

                    ITopologicalOperator topologicalOperator = (ITopologicalOperator)nowp;
                    IPolygon polygon = (IPolygon)topologicalOperator.Buffer(axMapControl1.Extent.Width * 0.008);
                    IRelationalOperator relationalOperator = (IRelationalOperator)polygon;
                    object o = null;
                    axMapControl1.DrawShape(polygon, ref o);
                    reslist.Items.Add("X:" + temp.x + " Y:" + temp.y);
                }
            }
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -