AE C# GIS 设计与开发课程分享(一) Ex01,Ex02——地图、图层加载及属性 访问
-
这学期在想学习的动力下,刚结束了GIS开发与设计课,简单入门了刚学的C#和ArcEngine,想趁热写点东西记录下来。
-
感觉这个作业Ex01-Ex07全做一遍就可以基本入门ArcEngine C#开发了,欢迎和我一样的大家一起学习。
写这篇文章:
1.第一,是为了纪念一下我Domen的入门IT的人生重大转折点;
2.第二是为了锻炼一下自己写作的能力;
3.还有因为我为了增加印象我重新整理了一下自己作业的代码花了很多时间不想浪费,直接拿出来供分享希望做点贡献;虽然下面的代码质量肯定是经不住的各种考验,但还是可以运行的,慢慢来。相信有很多和我一样的入门级的同胞,没事的,都是这么一窍不通过来的啦,我也是零基础过来的多亏了舍友,同学的讲解,才能勉强更得上大家的步伐。踩了贼多坑,建议还是了解一下控件和类的功能实现原理等等,那样捋的舒服点,不然这里搬一点那里搬一点不怎么好整,写别的代码也一样吧,都是从看代码到模仿的。然后没有一点C#基础的话看起来可能会有点吃力,我这学期其实也算是没C#基础,虽然大二下选修了C#但根本就是水过的,所以还是花了很多很多时间,其实我昨前天重新理一遍作业后才会自己写一点代码,之前都是复制粘贴。
-
好的现在终于步入正题了,一不小心简单介绍写这么多,我们的GIS开发与设计,是利用ArcEngine10.2和VS2012配套学习的,一边课上听老师讲教材,一边课下完成老师的作业
相应的教材和作业文件在这里:
- 链接:https://pan.baidu.com/s/15dlQuZyrx9OtZUNNZptXoA
提取码:88d6
复制这段内容后打开百度网盘手机App,操作更方便哦
因为每个地图文件与空间数据库的路径是设置好的,所以每个作业需要打开对应的文件夹下的地图否则打不开,比如说把地图单独粘贴到其他地方就打不开了
- 首先是第一部分安装和配置了,对应的VS和engine是这样,vs2012-ArcGIS10.2,vs2013 / 2015-ArcGIS10.4,VS10.6-ArcGIS2015 / 2017,按需求吧,我自己的安装是参考这位大哥的文章 https://blog.youkuaiyun.com/qq_35117024/article/details/80131198?utm_source=blogxgwz0 ,很详细,其他版本的vs和gis我也都有,有需要可以留言,注意如果有安装ArcGIS的话看一下破解文件service.txt,改成本地主机。安装和配置完按照结尾步骤生成一个窗体瞧瞧,相信大家就迫不及待的打开窗体想开始干活了。
EX01:ArcObjects中有哪几种Class,Class之间存在哪些关系?采用ArcObjects中的实例进行说明,每种举3~5例。
- 这里不赘述了,在我上面分享的百度云链接里有作业文档。
EX02 :关系编写程序,获取MapDocument 中的地图,获取地图中的图层,获取图层的基本属性。
功能需求:
- 加载MapDocument,并获取其包含的Map。
- 获取当前选中Map所包含的Layer。
- 显示选中Layer的属性信息。
实现效果
- 这个作业的功能需求,我一开始看上去,完全不知道什么意思,先跟着给的截图布置一下窗体,慢慢的就理解了
进去正题,在创建工程后(我创建的是EngineWindowsApplication),首先在from1.cs[设计]*窗口添加控件进去(我这里将from1改成了MainFrom02文件,下面就用MainFrom02.cs*来叙述),如图
- 依次将地图控件,LicenseControl(如果在普通的Windows项目中没有这个控件无法运行)拖入窗体(窗体的大小可以自行拉伸),这个界面呢,Ctrl+W,X打开工具箱,根据要求布置窗体界面就是按钮等等这个C#基本的控件,如下图,控件的分类什么和基本用法的自己可以去搜索一下,简单来说就是一个属性和一个事件。属性就是控件在基本的显示效果,在窗体中的位置和一些基本功能的设置,是不需要编写代码的;事件则是触发之后执行相关操作,如按钮点击,鼠标移动,下拉选择等等,选择控件右击属性,右侧属性窗格中一个闪电标志,就可以双击点进去写代码了,函数体什么的它都会帮你生成后,然后就可以按自己需求在生成的函数体力改动。
然后在Program.cs中加入下列有备注的三行代码:
using ESRI.ArcGIS;//需加
using ESRI.ArcGIS.esriSystem;//需加
//引用,本作业程序要用到
有用到别的当然可以自行添加
static void Main()
{
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//需加
//engine控件的使用需加入此行
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
然后在MainFrom02.cs中加入下图中用红框框出的部分(被#region 和#endregion 框起来的代码部分可以缩成上图中的灰色小框#region 后的文字会显示在灰色小框里在每个功能块之间用了一个空行来分开方便阅读)