在上文的基础上,(最简单的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();
//将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[] = name;//通过索引赋值
pRow[] = 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, ); //数据目录
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二次开发,如果有不对的地方,请多多包涵!

最简单的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. zookeeper学习(零)_安装与启动

    zookeeper学习(零)_安装与启动 最近换了新的电脑,终于买了梦寐以求的macbook.最近也换了新的公司,公司技术栈用到了zookeeper.当然自己也要安装学习下.省的渣渣的我,被鄙视就麻烦 ...

  2. jumper-server-部署官网版

    本文链接:https://www.cnblogs.com/wwtao/p/11491574.html 官网链接: https://jumpserver.readthedocs.io/zh/master ...

  3. FreeSql (二十四)Linq To Sql 语法使用介绍

    原本不支持 IQueryable 主要出于使用习惯的考虑,如果继承 IQueryable,编写代码的智能总会提示出现一堆你不想使用的方法(对不起,我有强迫症),IQueryable 自身提供了一堆没法 ...

  4. ES6-数组的新方法

    1.Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型. Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7)创建一个 ...

  5. 2010年NOIP普及组复赛题解

    题目及涉及的算法: 数字统计:入门题: 接水问题:基础模拟题: 导弹拦截:动态规划.贪心: 三国游戏:贪心.博弈论. 数字统计 题目链接:洛谷 P1179 这道题目是一道基础题. 我们只需要开一个变量 ...

  6. 001:photoshop教程

    1:添加辅助线:有个位移的坐标系图标:点击标志中,鼠标按着不动.之后拖动到对应的位置. 2:量距离:第一行.第二个图标.直接测量像素. 3:切割图片: 3.1:第三行.第一列:选择切片工具 3.2:之 ...

  7. ReactNative之Redux详解

    用redux有一段时间了,感觉还是有必要把其相关的知识点系统的总结一下的,毕竟好记性不如烂笔头.上篇博客更新了关于<ES6中的迭代器.Generator函数以及Generator函数的异步操作& ...

  8. Linux初识之VMWare14中配置Centos7桥接网络环境

    1.查看当前初始环境如下:

  9. ZooKeeper单机客户端的启动流程源码阅读

    客户端的启动流程 看上面的客户端启动的脚本图,可以看到,zookeeper客户端脚本运行的入口ZookeeperMain.java的main()方法, 关于这个类可以理解成它是程序启动的辅助类,由它提 ...

  10. Graphlab create的基本使用

    写在前面 GraphLab Create 是一款机器学习的函数库,其中的SFrame也是十分强大的数据管理工具.它允许直接从硬盘中读取数据,免于将数据全部加载到内存中.这就使得对于大数据的处理成为可能 ...