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

📄 form1.cs

📁 gis,使用c#,arcobject(ae)实现空间分析的列子(geoproceor使用),根据面积淹没,实现灾评信息的统计.
💻 CS
📖 第 1 页 / 共 2 页
字号:
                //    return;
                //}
                /////////////////////////////////////////////////////////////////////////////////
                //  run  Geoprocessor
                // Initialize the Geoprocessor   

                Geoprocessor GP = new Geoprocessor();
                GP.OverwriteOutput = true;
                
                //ESRI.ArcGIS.SpatialAnalystTools.TabulateArea
                //创建toolbox
                TabulateArea intesectArea = new TabulateArea();
                // 工具参数设置
                intesectArea.in_class_data = XZFeatureClass;
                intesectArea.in_zone_data = FXFeatureClass;
                intesectArea.class_field = "xzid";
                intesectArea.zone_field = "fxZone";
                intesectArea.out_table = Application.StartupPath+@"\test.dbf";

                //执行地理工具
               // GP.Execute(intesectArea, null);
                IGeoProcessorResult results = (IGeoProcessorResult)GP.Execute(intesectArea, null);
                //MessageBox.Show(ReturnMessages(GP));
                if (results != null)
                {

                    if (results.Status.ToString() == esriJobStatus.esriJobSucceeded.ToString())
                    {

                        //执行地理工具结束

                        //打开table

                        IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
                        IFeatureWorkspace Workspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(Application.StartupPath, 0);
                        ITable OutTable = Workspace.OpenTable("test");




                        for (int i = 0; i < XZFeatureClass.FeatureCount(new QueryFilterClass()); i++)
                        {

                            IFeature XZfeature = XZFeatureClass.GetFeature(i);
                            XZname = XZfeature.get_Value(indexNmfiled).ToString();                       //得到乡镇名
                            string xzid = XZfeature.get_Value(indexIdfiled).ToString();                          //得到ID

                            IArea Area = (IArea)XZfeature.Shape.Envelope;
                            WHArea = Area.Area;                                                        //完整的面积

                            ICursor PCursor = OutTable.Search(new QueryFilterClass(), false);
                            IRow Prow = PCursor.NextRow();
                            AftArea = 0;
                            while (Prow != null)
                            {
                                if (OutTable.Fields.FindField("XZID_" + xzid) != -1)
                                {
                                    AftArea = AftArea + (double)Prow.get_Value(OutTable.Fields.FindField( "XZID_" + xzid));

                                }
                                Prow = PCursor.NextRow();

                            }




                            //string sql = "select * from  shjj where 乡='" + XZname + "'";
                            DataView dv = new DataView(dt);
                            dv.RowFilter = "乡='" + XZname + "'";

                            //SqlCommand cmdLiming = new SqlCommand(sql, Conn);

                            //using (SqlDataReader drLiming = cmdLiming.ExecuteReader())
                            {
                                //while (drLiming.Read())
                                foreach (DataRowView drLiming in dv)
                                {

                                    // if (drLiming.)
                                    if (XZname == (string)drLiming["乡"])
                                    {

                                        Re_area = Re_area + AftArea / WHArea * (double)drLiming["面积"];
                                        Re_gdp = Re_gdp + AftArea / WHArea * (double)drLiming["gdp"];
                                        Re_gdzc = Re_gdzc + AftArea / WHArea * (double)drLiming["固定资产"];
                                        Re_house = Re_house + AftArea / WHArea * (double)drLiming["房屋"];
                                        Re_people = Re_people + AftArea / WHArea * (double)drLiming["人口"];
                                        Re_village = Re_village + AftArea / WHArea * (double)drLiming["村"];
                                        //MessageBox.Show(drLiming[0].ToString());
                                        ////ListViewItem myItem = new ListViewItem(drLiming[0].ToString());
                                        ////myItem.SubItems.Add(drLiming[1].ToString());
                                        ////myItem.SubItems.Add(drLiming[2].ToString());
                                        ////myItem.SubItems.Add(drLiming[3].ToString());
                                        ////myItem.SubItems.Add(drLiming[4].ToString());
                                        ////ListView1.Items.Add(myItem);
                                        ////myItem.ImageIndex = 0;
                                        //SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

                                        //DataSet dst = new DataSet();
                                        //da.Fill(dst, "tongji");
                                    }
                                }
                            }




                        }


                        pResultesDt.Rows.Add(new object[] { FXFeatureClass.AliasName, Re_area, Re_gdp, Re_people, Re_gdzc, Re_house, Re_village });
                    }
                    else {
                        MessageBox.Show(FXFeatureClass.AliasName + "计算失败!" + ReturnMessages(GP));
                    
                    }
                }
                else
                {
                    MessageBox.Show(FXFeatureClass.AliasName + "计算失败!" + ReturnMessages(GP));
                    //  MessageBox.Show(ReturnMessages(GP));
                }
            
        }

        private string ReturnMessages(Geoprocessor gp)
        {
            StringBuilder sb = new StringBuilder();
            if (gp.MessageCount > 0)
            {
                for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
                {
                    System.Diagnostics.Trace.WriteLine(gp.GetMessage(Count));
                    sb.AppendFormat("{0}\n", gp.GetMessage(Count));
                }
            }
            return sb.ToString();
        }

        private IFeatureClass getIFeatureClass(string paths)
        {
            //cast for the feature workspace from the workspace  
            string dataPath;
            string nameOfFeatureClass;

            dataPath = paths.Substring(0, paths.LastIndexOf("\\"));                       //将最后一个字符“/”之前的字符提取出来
            nameOfFeatureClass = paths.Remove(0, paths.LastIndexOf("\\") + 1);                //将最后一个字符“/”之后的字符提取出来
            nameOfFeatureClass = nameOfFeatureClass.Substring(0, nameOfFeatureClass.Length - 4);    //将最后一个字符“.”之前的字符提取出来

            try
            {
                IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
                //IWorkspace pp = workspaceFactory.OpenFromFile(dataPath, 0);
                IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath, 0);
                // IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;        //open the featureclass       
                return featureWorkspace.OpenFeatureClass(nameOfFeatureClass);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "无法打开数据!");
                throw;

            }     

        }


        private void button1_Click(object sender, EventArgs e)
        {
            QureySql(getIFeatureClass(@"D:\例子\intersect\FxtTools\乡镇界图层\乡镇界.shp"), "");

        }

        private void QureySql(object layer, object Sql)
        {
            //查出结果 点击一条记录,定位或者选中要素

        }

        private void QureySql(IFeatureClass FCL, string sql) 
        {

            //IFeatureClass FCL = getIFeatureClass(featurepath);
            IQueryFilter pQueryFilter=new QueryFilterClass();
            pQueryFilter.WhereClause=sql;
            DataRow newRow;

            IFeatureCursor feaCur = FCL.Search(pQueryFilter, false);
            IFeature Pfeature = feaCur.NextFeature();

            DataTable DTtable = new DataTable();
            //增加列
            for (int i=0; i < FCL.Fields.FieldCount; i++)
            {
                DTtable.Columns.Add(FCL.Fields.get_Field(i).Name.ToString(), typeof(string));
                
            }
            newRow = DTtable.NewRow();
            while (Pfeature != null) 
            {

                for (int i = 0; i < feaCur.Fields.FieldCount; i++) 
                {
                    newRow[i] = Pfeature.get_Value(i).ToString();
                }
                
                DTtable.Rows.Add(newRow);
                newRow = DTtable.NewRow();
                Pfeature= feaCur.NextFeature();
            }
            
            this.dataGridView1.DataSource = DTtable.DefaultView;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
           // MessageBox.Show(dataGridView1.CurrentCell.OwningRow.Cells[0].Value.ToString());
            string fid;
 
            fid = dataGridView1.CurrentCell.OwningRow.Cells["fid"].Value.ToString();
           // MessageBox.Show(fid);
            //axMapControl1.AddLayerFromFile(@"D:\例子\intersect\FxtTools\乡镇界图层\乡镇界.shp");
            
            Single_zoom(fid, axMapControl1.Map,axMapControl1.get_Layer(0));

        }
        private void Single_zoom(string fid,IMap pmap,ILayer player) 
        {
            IFeatureLayer pFlayer = (IFeatureLayer)player;
            IFeatureClass pFC = pFlayer.FeatureClass;

            IQueryFilter PQF = new QueryFilterClass();
            
            PQF.WhereClause ="FID="+fid;
            //PQF.WhereClause = "FID = 1";
            try
            {
                
                IFeatureCursor pfcur = pFC.Search(PQF, false);
                
                ISelectionSet pseletionSet=pFC.Select(PQF, esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
                //pseletionSet.Select(PQF, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionEmpty, null);
                IFeature pFeature = pfcur.NextFeature();
                pmap.ClearSelection();
                pmap.SelectFeature(player,pFeature);
                IActiveView iAview = (IActiveView)pmap;
                iAview.Extent = pFeature.Extent;
                iAview.Refresh();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "该数据无法在图上显示!");
                throw;

            }     



        }
      

        private void zoombotton_Click(object sender, EventArgs e)
        {

            Mule_zoom(axMapControl1.get_Layer(0),axMapControl1.Map);
           

        }


        private void Mule_zoom(ILayer pLayer,IMap pmap) 
        {
            IFeatureLayer pFlayer = (IFeatureLayer)pLayer;
            IFeatureClass pFC = pFlayer.FeatureClass;

            pmap.ClearSelection();
            IQueryFilter PQF = new QueryFilterClass();
            string whereClause = "";
            string fid = "";

            for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
            {

                int rowNum_select = dataGridView1.SelectedRows[i].Index; ; ;
                //pow.
                fid = dataGridView1.Rows[rowNum_select].Cells["fid"].Value.ToString();
                if (i == 0)
                {
                    whereClause = "FID=" + fid;
                }
                else
                {

                    whereClause =whereClause+ "OR FID=" + fid;
                
                }
            }
            PQF.WhereClause = whereClause;
            IFeatureCursor pfcur = pFC.Search(PQF, false);
            IFeature pfeature=pfcur.NextFeature();

            IEnvelope penvelope = (IEnvelope)pfeature.Extent;
            

            //ISelectionSet pseletionSet = pFC.Select(PQF, esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
          
            //pseletionSet.Select(new QueryFilter(), esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
            //pmap.FeatureSelection = pseletionSet;
            while (pfeature!=null) 
            {

                pmap.SelectFeature(pLayer, pfeature);

                if (penvelope.XMax < pfeature.Extent.XMax) { penvelope.XMax = pfeature.Extent.XMax; }
                if (penvelope.XMin > pfeature.Extent.XMin) { penvelope.XMin = pfeature.Extent.XMin; }
                if (penvelope.YMax < pfeature.Extent.YMax) { penvelope.MMax = pfeature.Extent.YMax; }
                if (penvelope.YMin> pfeature.Extent.YMin) { penvelope.YMin = pfeature.Extent.YMin; }
                

                pfeature = pfcur.NextFeature();

            }

            IActiveView iAview = (IActiveView)pmap;
            iAview.Extent = penvelope;
            iAview.Refresh();
        }

    }


           
}

⌨️ 快捷键说明

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