AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)

先说一句,我是新手,刚开课,刚学的C#和engine,刚写的文章。下面的代码质量肯定是经不住的,慢慢来,相信有很多和我一样的未入门级的同志,没事,都是这么一窍不通过来的啦,我也是断断续续折腾了好几天搞出来的一点东西。踩了很多坑,也都是很**的坑,建议还是了解一下控件和类的功能实现原理等等,那样捋的舒服点,不然这里搬一点那里搬一点不怎么好整,写别的代码也一样吧,都是从看代码到模仿的。不过没有一点C#基础的话看起来可能会有点吃力。

刚开始学AE,所以自然会遇到无语多的问题,网上搜索到一些资料,还有一些前辈们的博客文章,当然也有书本的,很想收藏但是太多不便于管理,而且都是零散的组合才能达到我做作业的目的(好吧,暴露了,我是以做课堂作业的形式学的,所以肯定很片面了,哈哈),好了好了,步入正题,第一次写有点紧张,多多多多指教这是我的作业链接:https://pan.baidu.com/s/1m89Pw7fGspqyBw0oY9TNZQ提取码:28uo 

这是本课程所有作业的链接:链接:https://pan.baidu.com/s/1PILIUfPORfoSRxSTYro6NQ 提取码:iii8 复制这段内容后打开百度网盘手机App,操作更方便哦

目录

安装和部署(ArcGIS10.2+VS2012)

一、准备工作

二、实现思路



安装和部署(ArcGIS10.2+VS2012)


首先是第一部分安装和配置了,对应的VS和engine是这样,vs2012-ArcGIS10.2,vs2013 / 2015-ArcGIS10.4,VS10.6-ArcGIS2015 / 2017,按需求吧,我自己的安装是参考这位大哥的文章https://blog.csdn.net/qq_35117024/article/details/80131198?utm_source=blogxgwz0 ,很详细,注意如果有安装ArcGIS的话看一下破解文件service.txt,改成本地主机。安装和配置完按照结尾步骤生成一个窗体瞧瞧,相信大家就迫不及待的打开窗体想开始干活了。

AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)_第1张图片

首先大家最好设置一下,桌面右击,显示设置,屏幕分辨率为100%,不然窗体会乱彪,大小定不下来,设置完应该要注销一下才生效。


首先是关于界面,个人习惯,然后就是按钮等等这个C#基本的控件,如下图,控件的分类什么和基本用法的自己可以去搜索一下,简单来说就是一个属性和一个事件。属性就是控件在基本的显示效果,在窗体中的位置和一些基本功能的设置,是不需要编写代码的;事件则是触发之后执行相关操作,如按钮点击,鼠标移动,下拉选择等等,选择控件右击属性,右侧属性窗格中一个闪电标志,就可以点进去写代码了,函数体什么的它都会帮你生成后,淡然也可以按自己需求改动。

AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)_第2张图片


EX02 关系编写程序,获取MapDocument 中的地图,获取地图中的图层,获取图层的基本属性。

AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)_第3张图片

  1. 加载MapDocument,并获取其包含的地图--3个地图。
  2. 获取当前选中地图所包含的Layer.Kauai,HI,非洲,欧洲分别有3个图层
  3. 显示选中图层的属性信息。

一、准备工作

进去正题,首先添加控件进去,依次将地图控件,LicenseControl拖入窗体(窗体的大小可以自行拉伸),然后在Program.cs中加入下列代码:

using ESRI.ArcGIS;
using ESRI.ArcGIS.Carto;
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());
        }


然后这里先可以在引用里设置嵌入互操作,具体为什么后面了解了再作补充,右击属性,设置

嵌入互操作类型为假,我为了图方便统一都设置了。

AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)_第4张图片


然后按题目要求把相关控件直接拖进去,在属性里设置好文本啊之类的,这里只用到了拉布勒,按钮COMBOX,文本框(有一个属性MultLine可以设置是否为多列文本),因为这里只供显示,所以我有设置了只读类型,只读。控件按钮什么的也可以做的好看,图表啊字体什么的,有兴趣的可以自己整。

AE开发环境配置教程 ArcEngine10.2设计与开发课程学习(作业二)——地图、图层加载及属性访问(附ArcGIS,Engine,VS等的安装教程)_第5张图片


下一步就是设置地图了,双击LoadMxd进入代码区,因为我做的这个题目是点击加载地图(也可以在事件中进入),所以选择了这个事件。

二、实现思路

第一步是地图的加载,我参考了教材和这位前辈的文章,还是很详细的,但是我只用到了部分https://blog.csdn.net/weiwanshu/article/details/49784019,可以先看看这个。加载mxd的三种方法:
1。使用IMapControl接口的LoadMxFile加载地图
2.通过IMapDocument接口加载
3.使用ArcGIS Engine中封装好的ConstrolsOpenCommandClass

我推荐使用第一种,感觉好些,而且可以自己选择文件。我这里也只列出第一种方法实现的代码

我加载地图的代码如下:(别看一坨,很多都是我加了解释,毕竟我小白弄不很清楚,不过保证都是我手打手敲的HH慢慢磨)

       private void btn1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openfiledialog = new OpenFileDialog();
            openfiledialog.Title = "打开地图文档文件";
            openfiledialog.Filter = "地图文档 (*.mxd)|*.mxd";
            if (openfiledialog.ShowDialog() == DialogResult.OK)   //检查地图文档有效性
            {
                string filePath = openfiledialog.FileName;//获取文件地址
                
                if (axMapControl1.CheckMxFile(filePath))      
                 //  CheckMxFile用来判断地址是否有效 
                {
                    axMapControl1.LoadMxFile(filePath, 0, Type.Missing);
                    //使用axMapControl来加载mxd地图文档,下面的代码是依次访问各个地图并将地图            
                  名写入combox.item中去

                    IMapDocument pMapDocument = new MapDocumentClass();
                    pMapDocument.Open(filePath, null);
                   //这里也可以直接连接到当前地图,我这里是借用了之前写的代码,重新加载了文件, 
                   后续有时间改改
                    for (int i = 0; i < pMapDocument.MapCount; i++)//依次访问地图
                    {
                        axMapControl1.Map = pMapDocument.get_Map(i);                        
                        comboBox1.Items.Add(axMapControl1.Map.Name);
                    }//添加
                    axMapControl1.Refresh();    //可选,刷新
                    axMapControl1.Extent = axMapControl1.FullExtent;    //全局显示
                }
                else
                {
                    MessageBox.Show("无法打开!" + filePath + "不是有效的地图文档");
                }//在窗体中不用Console.write(),一般是通过MessageBox.Show()弹窗显示,也可以 
             用来作简单的调试什么的,具体的调试当然还是运行过程中间变量。
 
            }            
        }

到了这里可以运行试试看了哈哈,要是各种报错我就没办法一一列出了,不过完全不要灰心,我也是在经历了Ñ次百度各种错误解决,猜坑嘛,踩多了就好。

然后就是下拉选择了,下拉框有一个SelectChange的事件,点进去开始编写,因为我一开始没注意到地图里有一个栅格文件,所以按照书本“的ArcGIS中的应用于开发”,学校的教材(有需要可以发PDF),很薄的,在P31面,按照顺序模仿敲好可以显示。

我才用的是较为方便直接的索引,有兴趣的可以尝试值值改变,下面是我的代码。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string filePath = axMapControl1.DocumentFilename;
            int i = comboBox1.SelectedIndex;    //存下拉选择框的索引

            IMapDocument pMapDocument = new MapDocumentClass();
            pMapDocument.Open(filePath, null);
            axMapControl1.Map = pMapDocument.get_Map(i);//按照选择的索引获取响应的map

            IMap pMap = axMapControl1.Map;//加载当前选择地图
            axMapControl1.Extent = axMapControl1.FullExtent;    //全局显示

            textBox1.Clear();//每次选择肯定要清空原来的文本啊

            /*读取地图中的图层信息,这是注释掉了,枚举方法,可自己实现
            UID id = new UIDClass();
            id.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";//FeatureLayer
            IEnumLayer pLayers = pMap.get_Layers(id, false);
            pLayers.Reset();*/

            for (int j=0; j

马上大功告成,,窗口显示出来了,还能选择,一个关闭把我难住了,找了半天没有找到关闭的函数,就找到一个clearlayer()能用,就用它了,但是清除完还得记得把下拉框,文本框里的东西存储的东西清除掉,对了,我对自己的按钮和文本框有些可能改了文本,但是应该不影响。


        //清除图层及显示的所有信息
        private void btn2_Click(object sender, EventArgs e)
        {
            axMapControl1.ClearLayers();
            axMapControl1.Refresh();
            comboBox1.Items.Clear();
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            textBox4.Clear();
        }

这个就没什么好解释的了,我对所有代码也就是这个样子的,我这里能正常工作,作为我的的第一个窗体作业可以说灰常兴奋了哈哈。祝好运。要赶紧做下个作业了,老师催的紧。朋友们可以关注一起学习啊,有老师前辈指点就更棒了。

你可能感兴趣的:(课堂作业,软件安装配置教程)