版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
地理信息系统设计与实现地理信息系统设计与实现课程设计报告课程名:地理信息系统设计与实现学院:资源与环境工程学院学生姓名:刘润专业:地理信息系统学号:0908100035指导教师:银老师2012年12月25日地理信息系统设计与实现课程设计报告资源与环境工程学院地理信息系统0910908100035刘润课程设计目的本次课程设计是在完成《地理信息系统设计与开发》课程后开展的实践性课程设计。本次课程设计主要完成地arcgis部分系统功能设计、系统界面设计和部分功能的实现;通过本次实习对arcGIS平台软件的各个功能模块有了较深入了解、熟悉和掌握;通过这次课程设计也进一步熟悉了基于arcGIS平台提供的组件进行应用系统开发的一般方法、思路和流程。其主要的目的概括为:1、熟练掌握arcGIS的公共平台及其开发环境;2、熟练掌握arcGIS二次开发组件开发;3、理解和掌握GIS工程原理及方法。课程设计任务课程设计的主要任务是利用GIS公共平台提供的二次开发环境开发一套“GIS软件”。桌面GIS应用程序框架的建立;1、添加Shp文件和图层.Lyr文件;2、添加菜单及实现;3、右键菜单添加及实现;4、状态栏的添加和实现;5、鹰眼功能的实现;6、属性数据表的查询;提交书面报告(编码系统、软件设计流程等)。开发平台开发工具和语言1、开发工具VisualStudio:VisualStudio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。目前已经开发到10.0版本,也就是VisualStudio2010。VisualStudio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。2、开发语言C#:C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。C#最引人入胜的地方是它和Java的不同,而不是相似的地方,其特点如下:中间代码、命名空间中的申明、基本的数据类型、两个基本类、参数传递、与COM的集成、索引下标、代理和反馈。ArcGISEngine开发平台1)产品简介ArcGIS是美国ESRI(EnvironmentalSystemsResearchInstitute,Inc.
美国环境系统研究所公司)推出的一条为不同需求层次用户提供的全面的、可伸缩的GIS产品线和解决方案。
ArcGISEngine为开发嵌入式GIS和独立运行的GIS桌面端应用程序而推出的二次开发组件库,它是GIS开发者产品的主要部分。
ArcGISEngine产品提供了更丰富的功能,它们包括新的如DataInteroperability、Maplex、Schematics和Tracking等扩展模块,新的符号控件,新的内置commands、tools、menus和模板等;此外,ArcGISEngine还可以直接调用Geoprocessing的各种功能,能够极大地简化开发人员的代码编写工作。ArcGISEngine开发工具包是一个基于ArcObjects组件的软件开发产品,用于构建自定义GIS
和制图应用软件,它并不是一个可以直接运行的终端产品,而是安装在开发人员电脑上用于开发的软件组件库。ArcGISEngine提供了基于COM、.NET、Java和C++的APIs,它支持4种开发环境(C++、COM、.NET和Java),能够实现跨平台部署(Windows、UNIX和Linux)。GIS程序员可以根据最终用户的业务需求,使用ArcGISEngineSoftwareDeveloperKit开发出不同的应用软件产品。为了让使用ArcGISEngine开发的应用软件能够正常分发,最终用户还需要将ArcGISEngineRuntime安装在每一台终端上。设计过程桌面GIS应用程序框架的建立1.新建项目启动VS2010,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。2.添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。如下所示。选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。拖入TabControl控件到Panel2,设置Dock属性为Fill。并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。最后将LicenseControl控件拖入到窗体的任意地方。按F5编译运行,可以看到刚才布局好的程序界面了。3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。这样,工具条和图层控件就与地图控件关联了。4、添加工具此时,工具条中还没有任何工具,添加的方法也很简单。右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。常见的工具有:MapNavigation中的导航工具,MapInquiry中的查询工具,FeatureSelection中的选择工具,你可以根据需要酌情添加工具。编译运行按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了。添加Shp文件和图层.Lyr文件添加Shp文件1.接上一章,点击MenuStrip,输入“添加shp”作为菜单的标题,输入“menuAddShp”作为菜单的名称。2.选中“添加shp”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件。自动生成事件处理方法如下图所示,我们就在方法内输入处理代码。3.在AE中编码,首先添加所需的ArcGIS的引用,在解决方案管理器中右键点击“添加引用”在对话框中选择ESRI.ArcGIS.DataSourceFile、ESRI.ArcGIS.Geodatabase类库,点击确定按钮。4.在Form1.cs源代码文件中,在源代码的最顶部,输入如下代码,导入命名空间。5.在菜单的Click事件处理方法中添加代码。6.在上述Click事件处理方法中添加代码。7.按F5键运行调试,点击“添加shp”菜单,就可以把C:\Arcgis\ArcTutor\Using_ArcGIS_Desktop文件夹中的USstates.shp文件添加到地图控件中。目前只能添加USstates.shp这一个文件。8.为了能够让用户可以添加磁盘上的任意shp文件,我们还需要添加一个工具箱中的OpenFileDialog控件到窗体。9.在上述Click事件处理方法中修改相应代码。10.按F5键运行调试,点击“添加shp”菜单,在弹出的对话框中,选中任意一个shp文件,点击确定,即可把shp文件加载到地图控件中。2.2通过lyr文件添加图层在菜单上添加一个“添加lyr”菜单,在其属性窗口将其Name属性改为menuAddLyr。按F5启动调试。添加菜单及实现1、添加菜单在设计视图中,单击菜单栏,会出现“请在此处键入”的提示,单击提示就可以键入菜单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单,如下所示:注意:每创建一个菜单,请在其属性面板中设置Name属性,而且不要为中文,因此Name值将是此菜单响应函数的函数名的一部分,带中文的函数名,总是不好。2、实现相关菜单首先定义指针(写在publicpartialclassForm1:Form下面即可):privateESRI.ArcGIS.Controls.IMapControl3m_mapControl=null;添加引用在设计视图中的属性面板中,选择Form1,即主窗体,单击事件按钮(闪电形状的那个按钮),打到“Load”事件并双击,添加此事件。在Form1_Load函数中初始化这些指针://取得MapControl的引用m_mapControl=(IMapControl3)this.axMapControl1.Object;依次双击每个菜单项,添加菜单响应函数。实现代码。3、编译运行按F5编译运行程序。也许你会发现,菜单命令的实现方式都是类型的。没错,在AE9.2中,内置了许多常用的Command和Tool,如ControlsAddDataCommandClass、ControlsMapZoomInToolClass、ControlsMapPanToolClass等等,这些内置对象在ESRI.ArcGIS.Controls命名空间中,你可以对象浏览器中查看。而且这些内置对象的调用方式都类似。右键菜单添加及实现1.创建右键菜单在Form1类里面添加如下变量的定义。在Form1_Load函数进行初始化,即菜单的创建2.添加菜单项第1步中创建的菜单可认为是菜单容器,里面什么都没有,具体的命令或工具作为菜单项添加到菜单容器才能工作。一般情况下,启动程序就要完成菜单项的添加,故此工作在Form1_Load函数完成。当然,添加菜单项之前,必须实现相应命令或工具。这里的命令或工具可以AE内置的也可以是自定义的。AE内置了许多可以直接调用的常用命令和工具,如ControlsAddDataCommandClass,在ESRI.ArcGIS.Controls命名空间中,大家可以对象浏览器中查看。当然,这里也可以直接调用AE内置的菜单,如ControlsFeatureSelectionMenu。另外,本讲也实现三自定义命令,以做示范。它们分别为图层可视控制命令(用于控制图层显示与否)、移除图层和放大到整个图层命令。实现方法也很简单,就是右击3sdnMap项目,选择“添加|类”,选择C#普通的类模板,用以下代码覆盖系统自己生成的所有代码1)图层可视控制类LayerVisibility代码。2)移除图层类RemoveLayer代码。3)放大至整个图层类ZoomToLayer。下面在Form1_Load函数中进行菜单项的添加。3.弹出右键菜单顾名思义,右键菜单是在鼠标右键按下的时候弹出,所以我们要添加TOCControl1控件的OnMouseDown事件,实现代码同样的方法,我们也可以实现主地图控件的右键菜单,以方便地图浏览。添加MapControl1控件的OnMouseDown事件,实现代码4.编译运行编译运行就可以看到在TocControl1控件和主地图控件中点击右键就弹出设置的右键菜单和实现其功能。状态栏的添加和实现1、添加状态栏项目在设计视图中,前面我们已经添加了StatusStrip控件,这时点击窗体中的状态栏,在其属性面板中找到“Items”项,单击其右边的按钮,在下拉框中选择“StatusLabel”,单击“添加按钮”,依次添加四个StatusLabel,依次修改属性参数如下表所示:序号Name属性Text属性Spring属性说明1MessageLabel就绪False当前所用工具信息2BlankTrue占位3ScaleLabel比例尺False当前比例尺4CoordinateLabel当前坐标False当前坐标设置好之后如下图所示:Spring属性表示可以按状态栏剩余空间自动伸缩。所以加入Blank项目,只是为了占个位子,以达到ScaleLabel和CoordinateLabel项目右对齐而MessageLabel项目左对齐的目的。2、显示当前所用工具信息首先添加axToolbarControl1的OnMouseMove事件(相信大家看了以上的教程,已经知道怎么添加事件了吧,还不知道的建议再温习下前几讲的内容)。3、显示当前比例尺,添加axMapControl1的OnMouseMove事件。4、显示当前坐标显示当前坐标也是axMapControl1的OnMouseMove事件中响应,故只要在axMapControl1_OnMouseMove函数中添加代码即可。鹰眼功能的实现1、添加鹰眼控件由于本教程在第一讲中没有预先考虑到鹰眼所放的位置,故我们要先稍微调整一下程序框架,并添加一个MapControl用于显示鹰眼。2、鹰眼的实现(1)载入地图到鹰眼控件当地图载入到主Map控件时,同时也载入到鹰眼控件,在axMapControl1_OnMapReplaced事件响应函数中添加代码。(2)绘制鹰眼矩形框为鹰眼控件MapControl1添加OnExtentUpdated事件,此事件是在主Map控件的显示范围改变时响应,从而相应更新鹰眼控件中的矩形框。(3)鹰眼与主Map控件互动为鹰眼控件MapControl2添加OnMouseDown事件。为鹰眼控件MapControl2添加OnMouseMove事件,主要实现按下鼠标左键的时候移动矩形框,同时也改变主地图控件的显示范围。按F5编译运行程序。按下左键在鹰眼窗口中移动,或者按下右键在鹰眼窗口中画一个矩形,主地图窗口的显示范围都会跟着变化。主地图窗口中的地图经放大缩小等操作后,鹰眼窗口的矩形框大小也会随着改变。属性数据表的查询1.创建属性表窗体新建一个Windows窗体,命名为“AttributeTableFrm.cs”;从工具箱拖一个DataGridView控件到窗体,并将其Dock属性设置为“Fill”;2.创建空DataTable首先传入ILayer,再查询到ITable,从ITable中的Fileds中获得每个Field,再根据Filed设置DataTable的DataColumn,由此创建一个只含图层字段的空DataTable。因为GeoDatabase的数据类型与.NET的数据类型不同,故要进行转换。3.装载DataTable数据从上一步得到的DataTable还没有数据,只有字段信息。因此,我们要通过ICursor从ITable中逐一取出每一行数据,即IRow。再创建DataTable中相应的DataRow,根据IRow设置DataRow信息,再将所有的DataRow添加到DataTable中,就完成了DataTable数据的装载。为保证效率,一次最多只装载2000条数据到DataGridView。上面的代码中涉及到一个获取图层类型的函数getShapeTape,此函数是通过ILayer判断图层类型的。绑定DataTable到DataGridView通过以上步骤,我们已经得到了一个含有图层属性数据的DataTable。现定义一个AttributeTableFrm类的成员变量:
publicDataTableattributeTable;通过函数,我们很容易将其绑定到DataGridView控件中:调用属性表窗体通过1-4步骤,我们封装了一个AttributeTableFrm类,此类能够由ILayer显示图层中的属性表数据。那怎么调用AttributeTableFrm呢?
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业元宇宙数字展厅
- 电工及其电子基础 3
- 护理科护士工作计划
- 城市轨道交通运营管理电子教案 3-7 影响运营安全的乘客行为文明规范宣传与票务规定
- 2026年广东大湾区联考初中学业水平质量监测化学试卷
- 产150万套动力系统热控零部件智能制造产线改造项目可行性研究报告模板-备案审批
- 义务教育阶段寄宿制学校供应热水及超市经营情况排查表
- 2026年主合同与担保合同(1篇)
- 椎管内麻醉术后药物使用与管理
- 2026年医疗行业远程诊疗服务合同协议
- 中央国家药品监督管理局药品和医疗器械审评检查京津冀分中心华中分中心西南分中心2025年招聘27人笔试历年参考题库附带答案详解
- 销售分成合作合同范本
- 物业调解教学课件
- 【耳鼻喉9版】喉科学第八章 喉的神经性疾病
- 2025年陪诊师考试经典试题及答案发布
- 黄金三点式讲话课件
- 2025 年高职数字媒体技术(数字媒体)试题及答案
- 2025年江西会考英语试卷及答案
- 2025中国华电集团有限公司校园招聘笔试历年参考题库附带答案详解
- 2025年希望杯IHC-三年级真题(含答案)
- 农投集团笔试题目及答案
评论
0/150
提交评论