zoukankan      html  css  js  c++  java
  • 最简单的ArcGIS Engine应用程序(终)

    在上文的基础上,(最简单的ArcGIS Engine应用程序(上)

    下面将使用简单的代码实现要素类属性的查看。

    新增一个窗体,并从工具箱拖动DataGridView控件到该窗体中。设置该对象的Dock属性为Fill。

    为该窗体的Load时间处理方法添加代码。当窗体加载时,就从图层数据中读取要素类的属性信息,并且显示到DataGridView控件中。

    FeatrAttributeTable.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    using ESRI.ArcGIS.DataSourcesFile;
    using ESRI.ArcGIS.Geodatabase;
    using ESRI.ArcGIS.Carto;
    using System.IO;
    using ESRI.ArcGIS.Controls;
    
    namespace SimpleArcEngineDemo
    {
        public partial class FeatrAttributeTable : Form
        {
            //声明地图控件的变量。
            private AxMapControl axMapControl;
    
            public FeatrAttributeTable()
            {
                InitializeComponent();
            }
    
            //重载构造函数。
            public FeatrAttributeTable(AxMapControl pMapControl)
            {
                InitializeComponent();
                axMapControl = pMapControl;
            }
    
            private void FeatrAttributeTable_Load(object sender, EventArgs e)
            {
                //得到地图控件的第0层图层。
                ILayer pLayer = axMapControl.get_Layer(0);
                //将pLayer类型强制转换为IFeatureLayer。
                IFeatureLayer pFLayer = pLayer as IFeatureLayer;
                //得到要素类对象pFC
                IFeatureClass pFC = pFLayer.FeatureClass;
    
                //获得游标。
                IFeatureCursor pFCursor = pFC.Search(null, false);
                //获得第0图层的第一个要素, 要素中包含多个属性值。
                IFeature pFeature = pFCursor.NextFeature(); //将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature
    
    
                //新建内存表格, 并构建表结构,包括属性字段和数据字段。
                DataTable pTable = new DataTable();//新建内存表格
                DataColumn colName = new DataColumn("洲名"); //属性字段(属性名)
                colName.DataType = System.Type.GetType("System.String"); //数据字段(数据类型)
                pTable.Columns.Add(colName); //加到pTable中
    
                DataColumn colArea = new DataColumn("面积"); //属性字段(属性名)
                colArea.DataType = System.Type.GetType("System.String");  //数据字段(数据类型)
                pTable.Columns.Add(colArea); //加到pTable中
    
                //获得字段名为"CONTINENT"在内存表中的字段索引。下同
                int indexOfName = pFC.FindField("CONTINENT");
                int indexOfName2 = pFC.FindField("SQMI");
    
                //当要素不为空时
                while (pFeature != null)
                {
                    //得到indexOfName的索引号
                    string name = pFeature.get_Value(indexOfName).ToString();//得到属性字段对应的属性值
                    string area = pFeature.get_Value(indexOfName2).ToString();
                    DataRow pRow = pTable.NewRow(); //创建空行
                    pRow[0] = name;//通过索引赋值
                    pRow[1] = area;
                    pTable.Rows.Add(pRow);//加入到pTable中
                    pFeature = pFCursor.NextFeature(); //将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature
                }
                dataGridView1.DataSource = pTable; //将属性表连接到dataGridView1控件
            }
        }
    }

    Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    using ESRI.ArcGIS.DataSourcesFile;
    using ESRI.ArcGIS.Geodatabase;
    using ESRI.ArcGIS.Carto;
    using System.IO;
    
    namespace SimpleArcEngineDemo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            /// <summary>
            /// 2.2添加shp数据————添加ShapeFile文件到地图控件中。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void menuAddShp_Click(object sender, EventArgs e)
            {
                //步骤1: 创建工作空间工厂。
                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
    
                //文件过滤器, 选择后缀名为.shp
                openFileDialog1.Filter = "ShapeFile文件(*.shp)|*.shp";
    
                //设定文件对话框的初始路径
                openFileDialog1.InitialDirectory = @"D:data";
    
                //示例数据文件夹
                openFileDialog1.Multiselect = false; //不允许多选
                DialogResult dialogResult = openFileDialog1.ShowDialog();//打开对话框
                if (dialogResult != DialogResult.OK)
                {
                    return; //用户没有选择时返回
                }
                //得到文件名对应的路径、文件夹名等
                string pPath = openFileDialog1.FileName;    //得到完整的路径(路径+文件名)
                string pFolder = Path.GetDirectoryName(pPath);  //得到文件的路径(不包括文件名)
                string pFileName = Path.GetFileName(pPath); //得到文件的文件名
    
                //步骤2: 打开ShapeFile文件名对应的工作空间。
                IWorkspace pWorkspace1 = pWorkspaceFactory.OpenFromFile(pFolder, 0);  //数据目录
                IFeatureWorkspace pFeatureWorkspce = pWorkspace1 as IFeatureWorkspace; //将工作空间强转成要素工作空间
    
                //步骤3: 打开要素类。
                IFeatureClass pFC = pFeatureWorkspce.OpenFeatureClass(pFileName);
    
                //步骤4: 创建要素类图层。
                IFeatureLayer pFLayer = new FeatureLayerClass();
                pFLayer.FeatureClass = pFC;
                pFLayer.Name = pFC.AliasName;
    
                //步骤5: 关联图层和要素类。
                ILayer pLayer = pFLayer as ILayer;
                IMap pMap = axMapControl1.Map;
    
                //步骤6: 添加到地图控件中。
                pMap.AddLayer(pLayer);
                axMapControl1.ActiveView.Refresh();
    
    
            }
            /// <summary>
            /// 通过lyr文件添加图层。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void menuAddLyr_Click(object sender, EventArgs e)
            {
                //步骤1: 打开文件对话框浏览到一个具体lyr文件。
    
                //文件过滤器, 选择后缀名为.lyr
                openFileDialog1.Filter = "lyr文件(*.lyr)|*.lyr";
    
                //设定文件对话框的初始化路径
                openFileDialog1.InitialDirectory = @"D:data";
    
                openFileDialog1.Multiselect = false; //不允许多选
                DialogResult pDialogResult = openFileDialog1.ShowDialog(); //打开对话框
                if (pDialogResult != DialogResult.OK)
                {
                    return; //用户没有选择时返回
                }
                string pFileName = openFileDialog1.FileName; //得到完整的路径(路径+文件名)
    
                //步骤2: 通过地图控件的方法(AddLayerFromFile)直接加载。
                axMapControl1.AddLayerFromFile(pFileName);
                axMapControl1.ActiveView.Refresh();
            }
    
            private void 图层属性ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                FeatrAttributeTable frm = new FeatrAttributeTable(axMapControl1);
                frm.ShowDialog();
            }
        }
    }

     

    效果图:

    特别一提:

    IFeature pFeature = pFCursor.NextFeature(); 

    pFeatureCursor是对要素类进行查询返回的一个游标(即指向搜素结果集的一个指针),pFeatureCursor.NextFeature()即将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature。

    谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/edcoder/p/11713623.html
Copyright © 2011-2022 走看看