地理信息系统方案设计书与实现课程方案设计书报告课程设刘润.docx
- 文档编号:27983412
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:14
- 大小:249.13KB
地理信息系统方案设计书与实现课程方案设计书报告课程设刘润.docx
《地理信息系统方案设计书与实现课程方案设计书报告课程设刘润.docx》由会员分享,可在线阅读,更多相关《地理信息系统方案设计书与实现课程方案设计书报告课程设刘润.docx(14页珍藏版)》请在冰豆网上搜索。
地理信息系统方案设计书与实现课程方案设计书报告课程设刘润
地理信息系统设计与实现
课程设计报告
课程名:
地理信息系统设计与实现
学院:
资源与环境工程学院
学生姓名:
刘润
专业:
地理信息系统
学号:
0908100035
指导教师:
银老师
2012年12月25日
地理信息系统设计与实现课程设计报告
资源与环境工程学院地理信息系统0910908100035刘润
1、课程设计目的
本次课程设计是在完成《地理信息系统设计与开发》课程后开展的实践性课程设计。
本次课程设计主要完成地arcgis部分系统功能设计、系统界面设计和部分功能的实现;通过本次实习对arcGIS平台软件的各个功能模块有了较深入了解、熟悉和掌握;通过这次课程设计也进一步熟悉了基于arcGIS平台提供的组件进行应用系统开发的一般方法、思路和流程。
其主要的目的概括为:
1、熟练掌握arcGIS的公共平台及其开发环境;
2、熟练掌握arcGIS二次开发组件开发;
3、理解和掌握GIS工程原理及方法。
2、课程设计任务
课程设计的主要任务是利用GIS公共平台提供的二次开发环境开发一套“GIS软件”。
桌面GIS应用程序框架的建立;
1、添加Shp文件和图层.Lyr文件;
2、添加菜单及实现;
3、右键菜单添加及实现;
4、状态栏的添加和实现;
5、鹰眼功能的实现;
6、属性数据表的查询;
提交书面报告(编码系统、软件设计流程等)。
3、开发平台
1.开发工具和语言
1、开发工具VisualStudio:
VisualStudio是微软公司推出的开发环境。
是目前最流行的Windows平台应用程序开发环境。
目前已经开发到10.0版本,也就是VisualStudio2010。
VisualStudio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。
2、开发语言C#:
C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。
C#最引人入胜的地方是它和Java的不同,而不是相似的地方,其特点如下:
中间代码、命名空间中的申明、基本的数据类型、两个基本类、参数传递、与COM的集成、索引下标、代理和反馈。
2.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安装在每一台终端上。
4、设计过程
1.桌面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应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了。
2.添加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启动调试。
3.添加菜单及实现
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命名空间中,你可以对象浏览器中查看。
而且这些内置对象的调用方式都类似。
4.右键菜单添加及实现
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控件和主地图控件中点击右键就弹出设置的右键菜单和实现其功能。
5.状态栏的添加和实现
1、添加状态栏项目
在设计视图中,前面我们已经添加了StatusStrip控件,这时点击窗体中的状态栏,在其属性面板中找到“Items”项,单击其右边的按钮,在下拉框中选择“StatusLabel”,单击“添加按钮”,依次添加四个StatusLabel,依次修改属性参数如下表所示:
序号
Name属性
Text属性
Spring属性
说明
1
MessageLabel
就绪
False
当前所用工具信息
2
Blank
True
占位
3
ScaleLabel
比例尺
False
当前比例尺
4
CoordinateLabel
当前坐标
False
当前坐标
设置好之后如下图所示:
Spring属性表示可以按状态栏剩余空间自动伸缩。
所以加入Blank项目,只是为了占个位子,以达到ScaleLabel和CoordinateLabel项目右对齐而MessageLabel项目左对齐的目的。
2、显示当前所用工具信息
首先添加axToolbarControl1的OnMouseMove事件(相信大家看了以上的教程,已经知道怎么添加事件了吧,还不知道的建议再温习下前几讲的内容)。
3、显示当前比例尺,添加axMapControl1的OnMouseMove事件。
4、显示当前坐标
显示当前坐标也是axMapControl1的OnMouseMove事件中响应,故只要在axMapControl1_OnMouseMove函数中添加代码即可。
6.鹰眼功能的实现
1、添加鹰眼控件
由于本教程在第一讲中没有预先考虑到鹰眼所放的位置,故我们要先稍微调整一下程序框架,并添加一个MapControl用于显示鹰眼。
2、鹰眼的实现
(1)载入地图到鹰眼控件
当地图载入到主Map控件时,同时也载入到鹰眼控件,在axMapControl1_OnMapReplaced事件响应函数中添加代码。
(2)绘制鹰眼矩形框
为鹰眼控件MapControl1添加OnExtentUpdated事件,此事件是在主Map控件的显示范围改变时响应,从而相应更新鹰眼控件中的矩形框。
(3)鹰眼与主Map控件互动
为鹰眼控件MapControl2添加OnMouseDown事件。
为鹰眼控件MapControl2添加OnMouseMove事件,主要实现按下鼠标左键的时候移动矩形框,同时也改变主地图控件的显示范围。
按F5编译运行程序。
按下左键在鹰眼窗口中移动,或者按下右键在鹰眼窗口中画一个矩形,主地图窗口的显示范围都会跟着变化。
主地图窗口中的地图经放大缩小等操作后,鹰眼窗口的矩形框大小也会随着改变。
7.属性数据表的查询
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呢?
前面已经提到,我们是在TOCControl选中图层的右键菜单中弹出属性表窗体的,因此我们需要添加一个菜单项到TOCControl中Layer的右键菜单。
而在第六讲中,我们采用的是AE中的IToolbarMenu实现右键菜单的,故我们还需自定义一个Command,实现打开属性表的功能。
以ArcGIS的BaseCommand为模板新建项“OpenAttributeTable.cs”
注意:
新建BaseCommand模板时,会弹出一个对话框让我们选择模板适用对象,这时我们要选择MapControl、PageLayoutControl,即选择第二项或者倒数第二项。
要注意的是,最后我们必须移除添加的OpenAttributeTable菜单项,不然每次按下右键都会添加此菜单项,将造成右键菜单中含有多个OpenAttributeTable菜单项。
修改TOCControl的OnMouseDown事件的部分代码
6.编译运行。
就可以实现开始的效果图显示的功能。
7.
5、设计心得:
通过本次的设计我体会到了学习目标和计划要明确,制定适当的计划是必要的,它能提醒你下一个目标是什么,此刻应做什么。
学习需要兴趣,老师能在教学中提起学生的兴趣,是学习不枯燥,同时也使学习显得更容易,这个过程也需要自己的积极参与。
学习要认真,刻苦,刻苦会使你的学习效果很扎实。
这是我们对GIS了解熟悉之后,对它进行的一次扩展。
我们扩大它、使用它、完美它,来解决我们的实际问题。
这个界面是我努力的成果,代表了我对GIS的认识与发展。
虽然同学们在讨论过程中遇到过面红耳赤的尴尬,遇到过无措,我们在这个过程中成长了——是关于GIS的知识,也是关于合作精神的知识。
对于我来说,这个界面让我找到了一个专业方向。
我想我以后的就业就是要向的如此开发的方向转变,实现专业化、实用化,让每个人都可以用到我们的专业功能,让每个功能都能得到最大的利用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地理信息系统 方案设计 实现 课程 书报 设刘润