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

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

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

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

FeatrAttributeTable.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using ESRI.ArcGIS.DataSourcesFile;
  12. using ESRI.ArcGIS.Geodatabase;
  13. using ESRI.ArcGIS.Carto;
  14. using System.IO;
  15. using ESRI.ArcGIS.Controls;
  16.  
  17. namespace SimpleArcEngineDemo
  18. {
  19. public partial class FeatrAttributeTable : Form
  20. {
  21. //声明地图控件的变量。
  22. private AxMapControl axMapControl;
  23.  
  24. public FeatrAttributeTable()
  25. {
  26. InitializeComponent();
  27. }
  28.  
  29. //重载构造函数。
  30. public FeatrAttributeTable(AxMapControl pMapControl)
  31. {
  32. InitializeComponent();
  33. axMapControl = pMapControl;
  34. }
  35.  
  36. private void FeatrAttributeTable_Load(object sender, EventArgs e)
  37. {
  38. //得到地图控件的第0层图层。
  39. ILayer pLayer = axMapControl.get_Layer();
  40. //将pLayer类型强制转换为IFeatureLayer。
  41. IFeatureLayer pFLayer = pLayer as IFeatureLayer;
  42. //得到要素类对象pFC
  43. IFeatureClass pFC = pFLayer.FeatureClass;
  44.  
  45. //获得游标。
  46. IFeatureCursor pFCursor = pFC.Search(null, false);
  47. //获得第0图层的第一个要素, 要素中包含多个属性值。
  48. IFeature pFeature = pFCursor.NextFeature(); //将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature
  49.  
  50. //新建内存表格, 并构建表结构,包括属性字段和数据字段。
  51. DataTable pTable = new DataTable();//新建内存表格
  52. DataColumn colName = new DataColumn("洲名"); //属性字段(属性名)
  53. colName.DataType = System.Type.GetType("System.String"); //数据字段(数据类型)
  54. pTable.Columns.Add(colName); //加到pTable中
  55.  
  56. DataColumn colArea = new DataColumn("面积"); //属性字段(属性名)
  57. colArea.DataType = System.Type.GetType("System.String"); //数据字段(数据类型)
  58. pTable.Columns.Add(colArea); //加到pTable中
  59.  
  60. //获得字段名为"CONTINENT"在内存表中的字段索引。下同
  61. int indexOfName = pFC.FindField("CONTINENT");
  62. int indexOfName2 = pFC.FindField("SQMI");
  63.  
  64. //当要素不为空时
  65. while (pFeature != null)
  66. {
  67. //得到indexOfName的索引号
  68. string name = pFeature.get_Value(indexOfName).ToString();//得到属性字段对应的属性值
  69. string area = pFeature.get_Value(indexOfName2).ToString();
  70. DataRow pRow = pTable.NewRow(); //创建空行
  71. pRow[] = name;//通过索引赋值
  72. pRow[] = area;
  73. pTable.Rows.Add(pRow);//加入到pTable中
  74. pFeature = pFCursor.NextFeature(); //将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature
  75. }
  76. dataGridView1.DataSource = pTable; //将属性表连接到dataGridView1控件
  77. }
  78. }
  79. }

Form1.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using ESRI.ArcGIS.DataSourcesFile;
  12. using ESRI.ArcGIS.Geodatabase;
  13. using ESRI.ArcGIS.Carto;
  14. using System.IO;
  15.  
  16. namespace SimpleArcEngineDemo
  17. {
  18. public partial class Form1 : Form
  19. {
  20. public Form1()
  21. {
  22. InitializeComponent();
  23. }
  24.  
  25. /// <summary>
  26. /// 2.2添加shp数据————添加ShapeFile文件到地图控件中。
  27. /// </summary>
  28. /// <param name="sender"></param>
  29. /// <param name="e"></param>
  30. private void menuAddShp_Click(object sender, EventArgs e)
  31. {
  32. //步骤1: 创建工作空间工厂。
  33. IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
  34.  
  35. //文件过滤器, 选择后缀名为.shp
  36. openFileDialog1.Filter = "ShapeFile文件(*.shp)|*.shp";
  37.  
  38. //设定文件对话框的初始路径
  39. openFileDialog1.InitialDirectory = @"D:\data";
  40.  
  41. //示例数据文件夹
  42. openFileDialog1.Multiselect = false; //不允许多选
  43. DialogResult dialogResult = openFileDialog1.ShowDialog();//打开对话框
  44. if (dialogResult != DialogResult.OK)
  45. {
  46. return; //用户没有选择时返回
  47. }
  48. //得到文件名对应的路径、文件夹名等
  49. string pPath = openFileDialog1.FileName; //得到完整的路径(路径+文件名)
  50. string pFolder = Path.GetDirectoryName(pPath); //得到文件的路径(不包括文件名)
  51. string pFileName = Path.GetFileName(pPath); //得到文件的文件名
  52.  
  53. //步骤2: 打开ShapeFile文件名对应的工作空间。
  54. IWorkspace pWorkspace1 = pWorkspaceFactory.OpenFromFile(pFolder, ); //数据目录
  55. IFeatureWorkspace pFeatureWorkspce = pWorkspace1 as IFeatureWorkspace; //将工作空间强转成要素工作空间
  56.  
  57. //步骤3: 打开要素类。
  58. IFeatureClass pFC = pFeatureWorkspce.OpenFeatureClass(pFileName);
  59.  
  60. //步骤4: 创建要素类图层。
  61. IFeatureLayer pFLayer = new FeatureLayerClass();
  62. pFLayer.FeatureClass = pFC;
  63. pFLayer.Name = pFC.AliasName;
  64.  
  65. //步骤5: 关联图层和要素类。
  66. ILayer pLayer = pFLayer as ILayer;
  67. IMap pMap = axMapControl1.Map;
  68.  
  69. //步骤6: 添加到地图控件中。
  70. pMap.AddLayer(pLayer);
  71. axMapControl1.ActiveView.Refresh();
  72.  
  73. }
  74. /// <summary>
  75. /// 通过lyr文件添加图层。
  76. /// </summary>
  77. /// <param name="sender"></param>
  78. /// <param name="e"></param>
  79. private void menuAddLyr_Click(object sender, EventArgs e)
  80. {
  81. //步骤1: 打开文件对话框浏览到一个具体lyr文件。
  82.  
  83. //文件过滤器, 选择后缀名为.lyr
  84. openFileDialog1.Filter = "lyr文件(*.lyr)|*.lyr";
  85.  
  86. //设定文件对话框的初始化路径
  87. openFileDialog1.InitialDirectory = @"D:\data";
  88.  
  89. openFileDialog1.Multiselect = false; //不允许多选
  90. DialogResult pDialogResult = openFileDialog1.ShowDialog(); //打开对话框
  91. if (pDialogResult != DialogResult.OK)
  92. {
  93. return; //用户没有选择时返回
  94. }
  95. string pFileName = openFileDialog1.FileName; //得到完整的路径(路径+文件名)
  96.  
  97. //步骤2: 通过地图控件的方法(AddLayerFromFile)直接加载。
  98. axMapControl1.AddLayerFromFile(pFileName);
  99. axMapControl1.ActiveView.Refresh();
  100. }
  101.  
  102. private void 图层属性ToolStripMenuItem_Click(object sender, EventArgs e)
  103. {
  104. FeatrAttributeTable frm = new FeatrAttributeTable(axMapControl1);
  105. frm.ShowDialog();
  106. }
  107. }
  108. }

效果图:

特别一提:

  1. IFeature pFeature = pFCursor.NextFeature();

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

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

最简单的ArcGIS Engine应用程序(终)的更多相关文章

  1. 最简单的ArcGIS Engine应用程序(下)

    在中篇我们讲到使用OpenFileDialog控件可以添加shp文件.(最简单的ArcGIS Engine应用程序(中)) 添加lyr文件的操作也是大同小异的. using System; using ...

  2. 最简单的ArcGIS Engine应用程序(中)

    上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...

  3. 最简单的ArcGIS Engine应用程序(上)

    名词: IWorkspaceFactory 工作空间工厂 ShapeFileWorksapceFactory 矢量文件工作空间工厂 IWorkspce 工作空间 IFeatrueWorkspace 要 ...

  4. ArcGIS Engine能够做什么?

    转自原文ArcGIS Engine能够做什么? ArcGIS Engine是一组跨平台的嵌入式ArcObjects,它是ArcGIS软件产品的底层组件,用来构建定制的GIS和桌面制图应用程序,或是向原 ...

  5. ArcGIS Engine控件运行许可(转)

    ArcGIS Engine控件运行许可   Runtime绑定: 在ArcGIS Engine10.0中,许可方式发生了一定的变化,ArcGis10有一个新的要求---runtime绑定.就是在任何A ...

  6. ArcGIS Engine开发之旅01---产品组成、逻辑体系结构

    原文:ArcGIS Engine开发之旅01---产品组成.逻辑体系结构 ArcGIS Engine 由两个产品组成:  面向开发人员的软件开发包(ArcGIS Engine Developer k ...

  7. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  8. 如何在WPF程序中使用ArcGIS Engine的控件

    原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...

  9. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

随机推荐

  1. IOS集成JPush

    本篇文章采用Xcode手动集成JPush 证书 参考网址:https://docs.jiguang.cn//jpush/client/iOS/ios_cer_guide/ 下载SDK 下载网址:htt ...

  2. (六十八)c#Winform自定义控件-DEMO整理

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  3. Winform中使用zxing实现二维码生成(附dll下载)

    场景 zxing.dll下载 https://download.csdn.net/download/badao_liumang_qizhi/11623214 效果 实现 新建Winform程序,将上面 ...

  4. 松软科技课堂:SQL-SELECT-INTO语句

    SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...

  5. 学习方法分享:为何一年半就能拿到大厂 offer

    毕竟是聊聊曾经,放一张大学课堂上灵光一现,手写的一个我曾经一直使用的网名 前言 原文地址:Nealyang/personalBlog 讲真,的确是运气,才有机会进大厂.也没想到,那篇一年半工作经验试水 ...

  6. OAuth2.0摘要

    一.简介 不使用oauth2.0协议,资源所有者直接给需要使用资源的第三方应用共享凭据时,有这些问题: 需要直接共享给第三方应用凭据 需要服务器支持密码身份验证 凭据的访问权限过大,失去对访问时间和范 ...

  7. SqlServer 统计1-12月份 每个月的数据(临时表)

    想做一个年度图表 效果如下,通过sqlserver来统计今年1-12月份每个月的数据,效果如下 sql语句网上找了很多都没有找到满意的 找到的其中一种写法是这样子的 这种写法对于前端来说很方便 不用进 ...

  8. 让tomcat使用指定JDK

    一,前言 我们都知道,tomcat启动前需要配置JDK环境变量,如果没有配置JDK的环境变量,那么tomcat启动的时候就会报错,也就是无法启动. 但是在我们的工作或者学习过程中,有的时候会出现tom ...

  9. mybatis中Insert后主键返回

    1.Mapper的写法,返回的这个int是受影响的行号 int insertNewUser(User newUser); 2.xml的写法 <!--返回主键 形式1 --> <ins ...

  10. (6)autotools工具的使用

       autotools是专门用来生成Makefile的一系列工具,包括autoscan.aclocal.autoheader.autoconf.automake等.     (1)autotools ...