ArcGIS二次开发课程设计
- 格式:doc
- 大小:283.50 KB
- 文档页数:7
GIS二次开发(B)实验报告学号:姓名:班级:专业:指导老师:2014年11月22日目录1 实验一:软件安装与AOI书签开发 (1)1.1 实验目的 (1)1.2 实验内容 (1)1.3 实验结果 (1)2 实验二:地图数据组织与访问 (5)2.1 实验目的 (5)2.2 实验内容 (5)2.3 实验结果 (5)3 实验三:地图渲染与制图输出 (9)3.1 实验目的 (9)3.2 实验内容 (9)3.3 实验结果 (9)4 实验四:空间数据处理 (16)4.1 实验目的 (16)4.2 实验内容 (16)4.3 实验结果 (16)5 实验总结 (20)1实验一:软件安装与AOI书签开发1.1实验目的✧掌握ArcGIS Engine开发环境的相关软件安装✧掌握AOI书签程序开发1.2实验内容✧安装Visual Studio 2010✧安装Microsoft .NET Framework 3.5✧安装ArcGIS Engine 10.1✧安装ArcObjects Developer kit For Microsoft .NET Framework 10.1 ✧安装ArcGIS License Manager,并授权✧实现AOI书签的创建✧实现AOI书签的调用1.3实验步骤与结果1).添加控件和类库引用在程序主窗体添加一个菜单项(MenuItem),改名字Name改成MiCreateBooke。
在创建组合框。
2).添加“创建书签”函数Public void CreateBookmark(string sBookmarkName){IAOIBookmark aioBookmark=new AOIIBookmarkClass();If(aoiBokkmark!=null){aoiBook.location=axMapControll.ActieView.Extent;=sBookmarkName;}IMapBookmarks bookmarks=axMapControll.Map as TMapBookmarks; If(bookmarks!=null){Bookmarks.AddBookmark(aoiBookmark)}cb—BookmarkList.Items.Ad();}3).添加“书签名称设置”窗体4).实现创建书签与调用书签功能在主窗体的创建书签中编写函数代码。
成绩批阅日期重庆交通大学测量与空间信息处理实验报告实验课程:GIS二次开发程序设计实验名称: GIS二次开发班级:学号:姓名:实验日期: 2012 年 6 月 25 日实验一界面设计一、实验目的和要求1、学会对MO进行安装。
2、熟悉Visual Basic和Map Object程序的基本操作。
3、掌握toolbar的操作步骤。
4、设置GIS二次开发的界面,要求界面具有菜单、工具条及设计程序时用到的各种控件等。
二、实验内容1、利用Visual Basic相应控件和操作以及Map Object完成界面设计,运用所安装的MO的控件进行所需界面设计。
2、在设计的界面上一次添加菜单、工具条、图例控件、map控件、状态栏等,并熟练掌握其操作步骤。
三、实验步骤1、在有MO和VB的环境中进行所设计的界面设计。
1)菜单的设计。
要求具有一些常用的功能。
如下图所示:2、对toolbar进行设计。
在菜单栏下面进行插入Button按钮,并在按钮上插入相应图像。
步骤如下图:3、插入map、legend、status等控件,并调整其大小。
得到最后成果图如下图所示:四、实验总结4.1、实验中遇到的困难在进行界面设计时,会遇到一些意想不到的困难,比如在插入toolbar 中的Button时,如果没有加入imagelist控件时,就不能在Button上插入图像。
还有在进行菜单操作时,有时会因为空格运行不当,而不能得到理想的下拉菜单。
4.2、处理方法和技巧在进行设计时,一定要记住操作的先后顺序,不然不能不到效果。
插入map 和legend等控件时,适当调节其大小,使界面更美观。
4.3、经验体会和收获刚开始做实验时感觉好难,不知怎么下手,可在完成这几次实验后我熟悉了MO的最基本功能,发现用VB对GIS进行二次开发没有想象中的那么难,但关于控件的问题很多,而且大家都不是很懂,只能多多交流,从网上搜素相关资料。
现如今地理信息系统的应用越来越广发,对它进行二次开发可以更大的发挥此软件的功能。
《GIS设计开发课程设计》教学大纲课程代码:8256013 课程类别:专业必选学分:2实践周数:2一、目的与任务GIS二次开发课程设计是在学生学习专业课程的基础上,开设的一门专业综合实习课,该课程以程序设计开发为主,涉及到面向对象程序设计的一般知识,开发环境及编程语言,及GIS系统中常用的数据组织方式、地图的表达、可视化、查询以及系统设计等多方面综合性知识。
因此它需要学生了解面向对象程序设计,开发环境及编程语言,掌握GIS地图的表达、可视化、查询等的实现方式。
该课程注重理论基础知识和基本技能的掌握和应用,创新意识和动手能力的培养,自我学习能力的提咼。
适用专业:GIS专业。
二、内容与要求利用ArcEngine组件,结合C#或VB. net开发环境,设计并实现华农校园地理信息系统。
2. 1系统需求分析1、华农校园图的可视2、校园内各主要地点的查询(学生日常生活相关的地方):教学楼,院系,行政单位,校医院,学生宿舍,食堂,运动场,银行,超市等3、量算分析(距离量算,面积量算)4、统计分析、专题图表达(如各校区的学生人口分布图,男女比例图)5、空间分析(如缓冲区分析)6、最短路径查询(步行、坐校巴或开车)7、补充:选址分析。
女口:新建某超市,考虑哪些因素,如何定点,如:新建教学楼,考虑哪些因素,如何定点8、补充:校巴线路合理规划:根据学生出行,学生宿舍的位置,进行校巴线路规划(要求经过每个主要区域)2. 2系统功能分解依据系统的需求分析,对功能进行分解,确定实验项目的具体内容要求。
3、1、 数据的打开可视1.1前期准备工作:数据1. 2功能实现文件:打开、保存视图显示功能:放大、缩小、漫游、全屏等 图层的管理、维护、顺序的变化、增加、删除 图层的符号化表达2、 校园内各主要兴趣点的查询2. 1前期数据准备工作(1) 兴趣点数据图层的设计,如包含字段信息:名称,简介等(2) 图层数的确定(3) 数据的采集,数据的录入2. 2功能实现实现图文双向查询。
《GIS二次开发课程设计》报告目录1 设计目标 (1)2 需求分析 (1)2.1 业务构成... .. (1)2.2 数据容... (1)3 系统设计 (1)3.1 总体设计 (1)3.2 数据库设计 (2)3.3 平台选择 (2)3.4 详细设计 (2)4 功能实现 (3)4.1 基本功能 (3)4.2 符号化 (3)小结 ............................. 错误!未定义书签。
1 设计目标通过本系统的实施,建立全国各省人口分布和人均GDP排名系统,通过各种地图符号和色彩信息,将地图数据符号化,借此来制作全国各省人口比重、贫富差距大小等专题图。
2 需求分析2.1 业务构成中国人口在世界各国中位居首位,约占世界总人口的19%,根据2015年1月20日国家统计局公布2014年中国经济数据,2014年末,中国大陆总人口达136782万人,比上年末增加710万人。
其中,男性人口70079万人,女性人口66703万人,男性人口比女性多3376万人。
中国是人口大国,因此中国的人口分布情况和人口管理显得至关重要。
随着经济的发展,中国的经济状况日益增强。
但是整体而言贫富差距还是很大,所以将地图数据符号化来更好地分析各地区的人均GDP对国家掌控各地经济情况是十分有用的。
2.2 数据容数据主要包括全国各省的人口数量、总的GDP和人均GDP。
通过这些数据来处理地图,将地图做成不同属性的专题图。
3 系统设计3.1 总体设计此次设计的初衷即是开发一个可以制作专题地图的系统。
以全国人口数量和全国各省人均GDP为例进行制作和开发。
第一步就是找全国省区底图;接着找所需数据(全国各省人口数量和全国各省人均GDP。
)最后,通过VS设计系统,实现专题图制作功能。
3.2 数据库设计刚开始是想将找到的数据以表格的形式导入arccatalog中,希望经过处理可以直接使用,但是做到最后发现并不能将表格直接导入底图。
解决办法是在arcmap中编辑底图的属性表将找到的数据输入,保存。
GIS二次开发实验教学大纲一、实验课的性质与任务本课程实验大纲是面向地理信息系统专业学生开设的《GIS二次开发》实验课计划指导大纲,是依据《GIS二次开发》课程教学计划指导大纲编制。
本课程主要讲述了利用C#和ArcGIS 的AO、AE组件进行ArcGIS平台上的二次开发的基本流程,结合该课程教学计划大纲的相应内容,设计了6个单项实验和综合实验,力求提高学生的动手能力,做到理论和实践相结合。
使学生在实验过程中掌握GIS二次开发的基本思想、原理,能使用C#和ArcGIS 的AO、AE组件实现基于ArcGIS的程序设计。
二、实验目的与要求1.实验目的要求学生利用所学软件开发和GIS的基础知识和理论,参考有关标准,结合一个小型GIS系统,进行分析设计。
在具体分析设计过程中,允许适当加入一些课本中没有涉及到的知识、工具以及一些新方法,作为对课程的一种扩展。
2.实验要求通过本课程设计,应使学生了解完成一个GIS二次开发的完整过程,学习相关语言及相应的GIS组件开发技术。
1)在实验中,要求学生个人独立思考,设计算法流程,编写出程序,完成上机调试,最后给出实验报告。
2) 在实验中更好地理解和掌握GIS设计与应用这门课程中所学的基本理论和方法,强化程序设计和二次开发GIS软件的能力。
三、实验项目及内容提要四、实验内容安排:实验一:简单ArcEngine程序设计1、目的要求了解和熟悉程序界面布局,使用ArcEngine控件进行布局设计出一个仿ArcMap的简单程序。
2、实验内容:编写一个仿ArcMap布局的ArcEngine程序,有菜单、工具栏、状态栏、图层和地图控件,利用SplitContainer控件实现TocControl和MapControl在运行时自由左右拖动扩展界面的程序。
3、主要仪器设备及药品Windows 、、ArcEngine实验二:地图基本查询1、目的要求:熟悉ArcEngine地图的属性查询操作,掌握基本的查询接口和用法。
《GIS二次开发课程设计》报告院(系土木工程学院专业地理信息系统小组成员吴波,黄聪,蔡劼,米锐,房海峰,黄罡起讫日期2010.01.04—2010.01.17 目录1 系统实现目标 ....................................2 系统需求分析 ....................................3 系统设计 ........................................3.1 总体设计 ..........................................................................3.2 数据库设计 ......................................................................3.3 平台选择 ..........................................................................3.4 详细设计 ..........................................................................4 功能实现 ........................................4.1 地图载入 ............................................................................4.2 添加图形要素 .....................................................................4.3 通过图形查属性………………………………………………4.4 通过属性查询图形……………………………………………4.5 通过位置查询图形……………………………………………4.6 缓冲区分析……………………………………………………附件 ..............................................1 系统实现目标通过本系统的实施,建立公共灾害信息查询系统,主要针对于火灾和交通事故。
《GIS二次开发》课程标准一、课程说明注:1.课程类型(单一选项):A类(纯理论课)/B类(理论+实践)/C类(纯实践课)2.课程性质(单一选项):必修课/专业选修课/公共选修课3.课程类别(单一选项):公共基础课/专业基础课/专业核心课4.合作者:须是行业企业人员,如果没有,则填无二、课程定位本课程是测绘与地理信息系统专业的一门专业核心课程。
是一门实践性很强的课程,必须通过上机操作才能掌握所学的知识,强调讲授与上机操作相结合,保证学生有充分的上机条件。
通过本课程的学习,学生能够掌握计算机网络语言和ArcGISEngine相关方面的特点,掌握它们的主要应用领域和发展方向,具备一种基于C#语言开发的ArcGIS产品二次开发能力,为后续的学习,打下良好基础。
三、设计思路本课程按照学生掌握GIS应用开发技能的顺序进行组织,坚持以理论够用为度,以培养学生掌握GIS二次开发技能为主,将课程知识点与学习任务整合到设计的项目中,通过上机实践,让学生掌握C#语言实现对GIS的二次开发。
其总体设计思路是:以C#作为开发语言,结合大量实例,掌握ArcGISEngine10.0进行GIS二次开发的方法、过程和技巧。
主要包括ArcGISEngine接口的概念,利用ArcGISEngine构建GIS基本框架的方法,在ArcGISEngine环境下空间数据访问与查询、符号化显示与符号库定制、外部属性数据操作与专题图制作、地图整饰与打印输出、空间数据裁剪、地形分析、地图配准,以及空间数据图饰符号标注等功能的实现方法。
四、课程培养目标通过本课程的学习,让学生掌握GIS二次开发应具备的相关技能,学会C#开发工具,对GIS进行二次开发的方法,为测绘与地理信息专业后续课程提供支撑。
1.专业能力完成的安装与配置完成ArcGISEngine10.0的安装完成ArcGISEngine基础控件的加载完成GIS地图数据加载完成GIS地图符号化完成GIS地图的整饰与输出2.方法能力本课程在教学过程中,以学生为主体,通过案例教学、任务驱动教学、分组讨论教学、问题探究教学等教学方法,让学生主动参与到教学过程中,以编写代码为主,不断激发学习者的学习兴趣,让学生在不断地分析问题,解决问题,推理与判断过程中,提高学习效果,达到培养实际职业技能的培养目标。
GIS二次开发(B)实验报告二〇一五年11月3日目录1 实验一:AOI书签开发 (1)1.1 实验目的 (1)1.2 实验内容 (1)1.3 实验步骤与结果 (1)2 实验二:地图数据组织与访问 (8)2.1 实验目的 (8)2.2 实验内容 (8)2.3 实验步骤与结果 (8)3 实验三:地图渲染与制图输出 (16)3.1 实验目的 (16)3.2 实验内容 (16)3.3 实验步骤结果 (16)4 实验总结 (23)1实验一:AOI书签开发1.1实验目的✧掌握AOI书签程序开发1.2实验内容✧实现AOI书签的创建✧实现AOI书签的调用1.3实验步骤与结果public void createbookmark(string sbookmarkname)//参数为书签名{//通过iaolbookmark接口创建一个变量,其类型为aoibookmark,保存当前地图范围。
IAOIBookmark aoibookmark = new AOIBookmarkClass();if (aoibookmark!= null){aoibookmark.Location = axMapControl1.ActiveView.Extent; = sbookmarkname;}//通过imapbookmarks接口访问当前地图,并向地图中加入新建书签IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;if (bookmarks!= null){bookmarks.AddBookmark(aoibookmark);}cbbookmarklist.Items.Add();}}}namespace xy{public partial class AdmitBookmarkName : Form{public MainForm m_frmMain;public AdmitBookmarkName(){InitializeComponent();}public AdmitBookmarkName(MainForm frm){InitializeComponent();if (frm != null){m_frmMain = frm;}}//“确认”按钮的“点击”事件响应函数,用于创建书签private void btnAdmit_Click(object sender, EventArgs e){if (m_frmMain != null && tbBookmarkName.Text == ""){m_frmMain.createbookmark(tbBookmarkName.Text);}this.Close();}}}2实验二:地图数据组织与访问2.1实验目的✧了解ArcGIS Engine中地图数据的组织结构✧掌握ArcGIS Engine地图数据访问方法2.2实验内容✧编写“数据操作”类✧利用DataGridView控件展示Continents图层的序号和名称字段2.3实验步骤与结果初始化窗口using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace MapControlApplication1{public partial class Databoard : Form{public Databoard(){InitializeComponent();}public Databoard(string sDataName, DataTable dataTable){//初始化窗体及控件。
实验四空间要素的选择一、实验目的:1. 加深理解接口编程的基本思想,熟悉接口编程的方法;2. 理解图层几何要素选择的基本思想与思路;3. 掌握要素选择的几种基本方法,实现矩形、椭圆、圆形和任意形状的选择。
二、实验内容:1. 调用ESRI.ArcGIS.Controls接口实现要素选择;2. 通过创建class SelectByEllipseClass类编写要素选择程序。
三、实验心得:通过自己动手编写程序,总结了一下调用系统选择工具和自己写类实现选择功能的优缺点:(1)ESRI.ArcGIS.Controls简单易学,能够很好地实现基础平台接口的复用,体现出二次开发利用基础平台的特点;缺点是,仅能ArcGis已经实现了的功能,开发灵活性受限制,难以创新。
(2)创建工具类,优点是能够根据需要编写任意的工具,实现系统尚未封装在内的功能;但对编程人员水平要求高,要熟练掌握基础平台开发语言,难度较大。
这就要求在选择两种方法时慎重考虑。
要熟悉ArcGis的基本功能,根据用户需求要能够迅速知道,利用ArcGis该功能是否可以实现,是,如何实现的,否,与哪些功能类似,就要自己仿照次功能从基础类写起。
四、实验内容:1.功能展示:(1)菜单选项(2)矩形选择(3)圆形选择:(4)椭圆形工具选择:2.实现方法一:调用系统ESRI.ArcGIS.Controls实现(1)设置flag:strMouseDownCtl来获取鼠标按下的菜单。
用该方法仅实现了矩形选择和圆形选择。
private void retagelToolStripMenuItem_Click(object sender, EventArgs e){strMouseDownCtl = "RectSelection";}private void circleSelectionToolStripMenuItem_Click(object sender, EventArgs e){strMouseDownCtl = "CircleSelection";}(2)根据strMouseDownCtl获取的事件调用系统相应的选择工具case"RectSelection":{axMapControl1.CurrentTool = null;axMapControl1.MousePointer =ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerCrosshair;IGeometry pGeom = axMapControl1.TrackRectangle();axMapControl1.Map.ClearSelection();axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, axMapControl1.Map.ActiveGraphicsLayer, null);axMapControl1.Map.SelectByShape(pGeom, null, false);axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection,axMapControl1.Map.ActiveGraphicsLayer, null);break;}case"CircleSelection":{axMapControl1.CurrentTool = null;axMapControl1.MousePointer =ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerCrosshair;IGeometry pGeom = axMapControl1.TrackCircle();axMapControl1.Map.ClearSelection();axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, axMapControl1.Map.ActiveGraphicsLayer, null);axMapControl1.Map.SelectByShape(pGeom, null, false);axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, axMapControl1.Map.ActiveGraphicsLayer, null);break;}3. 实现方法二:通过创建工具类实现选择(1)创建类:SelectByEllipse.csclass SelectByEllipseClass代码结构:(2)在Ellipse Selection菜单下编写响应事件private void ellipseSelectionToolStripMenuItem_Click(object sender, EventArgs e){SelectByEllipseClass selectByEllipse = new SelectByEllipseClass(axMapControl1, this.m_selectionProperty);}五、遇到的问题1.选择新的菜单时,先前使用的菜单没有释放,仍在作用。
精品文档《GIS二次开发课程设计》报告目录1 设计目标 (1)2 需求分析 (1)2.1 业务构成... (1)2.2数据内容 (1)3 系统设计 (1)3.1 总体设计 (1)3.2 数据库设计 (2)3.3 平台选择 (2)3.4 详细设计 (2)4 功能实现 (3)4.1 基本功能 (3)4.2 符号化 (3)小结 .............. 错误!未定义书签1 设计目标通过本系统的实施,建立全国各省人口分布和人均GDP排名系统,通过各种地图符号和色彩信息,将地图数据符号化,借此来制作全国各省人口比重、贫富差距大小等专题图。
2 需求分析2.1 业务构成中国人口在世界各国中位居首位,约占世界总人口的19%,根据2015 年1月20日国家统计局网站公布2014年中国经济数据,2014年末,中国大陆总人口达136782万人,比上年末增加710万人。
其中,男性人口70079万人,女性人口66703万人,男性人口比女性多3376 万人。
中国是人口大国,因此中国的人口分布情况和人口管理显得至关重要。
随着经济的发展,中国的经济状况日益增强。
但是整体而言贫富差距还是很大,所以将地图数据符号化来更好地分析各地区的人均GDP对国家掌控各地经济情况是十分有用的。
2.2 数据内容数据主要包括全国各省的人口数量、总的GDP和人均GDP通过这些数据来处理地图,将地图做成不同属性的专题图。
3 系统设计3.1 总体设计此次设计的初衷即是开发一个可以制作专题地图的系统。
以全国人口数量和全国各省人均GDP为例进行制作和开发。
第一步就是找全国省区底图;接着找所需数据(全国各省人口数量和全国各省人均GDP )最后,通过VS设计系统,实现专题图制作功能。
3.2数据库设计刚开始是想将找到的数据以表格的形式导入arccatalog中,希望经过处理可以直接使用,但是做到最后发现并不能将表格直接导入底图。
解决办法是在arcmap中编辑底图的属性表将找到的数据输入,保存。
实验五:GIS二次开发一、实验目的1.了解GIS二次开发的基本原理与方法;2.掌握ArcObjects二次开发的基本方法。
二、实验准备1.软件准备:Visual C++6.0,ArcGIS 9.0(ArcObjects)2.资料准备:ArcTutor(空间数据或数字化数据)三、实验步骤1.建立应用程序框架(1)启动Visual C++6.0。
(2)从“File”菜单选择“New”命令(或按Ctrl+N键),弹出“New”对话框。
(3)切换到“Project”选项卡。
(4)在“Project name”中,选取AppWizard MFC(exe),在文本框键入项目的名字,如“AoEx”。
MFC AppWizard根据所键入的项目名字自动生成相应的项目文件和框架类,并在根文件夹下创建以该名字命名的子文件夹,子文件夹中包含初始项目文件。
(5)在“Location”文本框键入用于存放项目的根目录,如“D:\GIS_EX”,或点击文本框后的按钮进行选择。
(6)单击“OK”按钮,弹出MFC AppWizard –Step1 of 6对话框,选择Single documeut (单文档,单文档界面(SDI)一次只允许打开一个文档边框窗口)。
(7)单击“Next”按钮,弹出MFC AppWizard – Step 2 of 6对话框,选择None(该选项不支持任何ODBC库)。
(8)单击“Next”按钮,弹出MFC AppWizard – Step3 of 6对话框,选择“None”选项(表示不带ActiveX支持)。
(9)单击“Next”按钮,弹出MFC AppWizard – Step4 of 6对话框,从中可以选择各种不同的用户界面选项,并可以选择MAPI和Windows Sockets支持。
这里使用缺省设置。
如果要设置其它高级选项,请单击“Advance”按钮,弹出“Advanced Options”对话框。
地理信息系统GIS二次开发程序设计实验报告班级:10级测绘1班学号:姓名:指导教师:面向接口编程一、实验目的:1.理解接口编程、面向对象编程的思想,两者的区别,以及各自的优缺点;2.掌握AE接口实现图层加载的方法:IworkspaceFactory-->Workspace->IfeatureWorkSpace->IFeatrueClass->IFeature();3.理解并掌握使用UI进行属性查询和空间查询;二.实验内容:1. 利用IWorkSpace接口在Map中增加一个GeoDatabase图层;2. 利用Imap的SelectBy*实现简单选择;3. 利用IQueryFilter实现简单空间查询。
(未实现)三、实验过程1.接口、面向接口编程基本知识点。
(1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则;是在一定粒度视图上同类事物的抽象表示。
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);一个体有可能有多个抽象面。
(2)面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法;是与“面向过程”即“我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现”相对应的。
面向对象实现了对象属性与行为的分离,对象之间通过消息进行通信;具有同一属性和行为的对象被抽象成类,每一个类是相同或相似属性和方法的封装;类与类之间具有继承和派生关系。
(3)面向接口与面向对象的区别:接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)是针对编程开发的对象而言的,不是同一感念。
interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。
GIS二次开发实验报告学号:*************名:***班级:1423101专业:地理信息系统任课老师:李小龙二零一七年六月十二日目录1实验一:AOI书签开发 (1)1.1实验目的 (1)1.2实验内容 (1)1.3实验步骤与结果 (1)2.1实验目的 (5)2.2实验内容 (5)2.3实验步骤与结果 (5)2实验三:地图渲染 (9)3.1实验目的 (9)3.2实验内容 (9)3.3实验步骤结果 (9)3实验四:空间数据处理 (16)4.1实验目的 (16)4.2实验内容 (16)4.3实验步骤与结果 (16)4实验五:GIS分析 (25)5.1实验目的 (25)5.2实验内容 (25)5.3实验步骤与结果 (25)5实验六:栅格数据处理 (33)6.1实验目的 (33)6.2实验内容 (33)6.3实验步骤与结果 (33)6实验总结 (43)1实验一:AOI书签开发1.1实验目的✧掌握AOI书签程序开发1.2实验内容✧实现AOI书签的创建✧实现AOI书签的调用1.3实验步骤与结果实验思路、关键代码(全面注释)、运行结果截图实验思路:空间书签是用户定义创建的标志某个特定地理位置的快捷方式,创建好书签后能够很方便的找到某个地理位置。
在本实验中我们需要创建的是AOI书签,即用户所关心的一个范围,通过调用该书签,用户可以马上找到书签所指范围。
实现本实验主要包括以下几个方面:1.添加控件和类库引用:添加创建书签控件、保存和调用书签控件,添加Geometry类库2.添加“创建书签”函数:创建书签,保存当前感兴趣范围,将书签名加入组合框,以便调用3.添加“书签名称设置”窗体:获取书签名,传递给主窗体4.添加两个事件响应函数:“创建书签”菜单项的点击事件,作用是打开“书签名称设置”窗体;“确认”按钮的点击事件,作用是调用创建书签函数5.实现与调用书签:添加组合框的事件响应函数,作用是当组合框中选项改变时,地图将刷新显示出书签所记录的范围。
地理信息系统GIS二次开发程序设计
实验报告
班级:10级测绘1班学号:
姓名:
指导教师:
面向接口编程
一、实验目的:
1.理解接口编程、面向对象编程的思想,两者的区别,以及各自的优缺点;
2.掌握AE接口实现图层加载的方法:
IworkspaceFactory-->Workspace->IfeatureWorkSpace->IFeatrueClass->IFeature();
3.理解并掌握使用UI进行属性查询和空间查询;
二.实验内容:
1. 利用IWorkSpace接口在Map中增加一个GeoDatabase图层;
2. 利用Imap的SelectBy*实现简单选择;
3. 利用IQueryFilter实现简单空间查询。
(未实现)
三、实验过程
1.接口、面向接口编程基本知识点。
(1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则;是在一定粒度视图上同类事物的抽象表示。
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
(2)面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法;是与“面向过程”即“我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现”相对应的。
面向对象实现了对象属性与行为的分离,对象之间通过消息进行通信;具有同一属性和行为的对象被抽象成类,每一个类是相同或相似属性和方法的封装;类与类之间具有继承和派生关系。
(3)面向接口与面向对象的区别:
接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)是针对编程开发的对象而言的,不是同一感念。
interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。
2.GeoDatabase的数据加载:
(1)理解
Workspace是一个容器,包含了空间和非空间数据集,如feature class,raster dataset,table。
提供了一系列创建和操作数据集的方法。
FeatureClass 是空间事物的顶级类,类似与C#中的Object类,提供了一系列属性和方法。
在同一个FeatureClass中的Feature具有相同的属性字段。
FeatureLayer是一个基于矢量数据的图层,典型的数据包括Geodatabase、coverage和shapefile等,FeatureLayer可以直接在MapControl中显示。
它们之间的关系如下:
IworkspaceFactory->IworkSpace->IfeatureWorkSpace-->IFeatrueClass-->IFeature()
IfeatureLay--->ILayer----->IMap (2)方法一:调用IWorkspace接口实现
1)创建一个类工厂ClassFactory
2)使用类工厂创建要使用的工作区。
3)使用工作区打开并得到FeatureClass 。
4)把FeatureClass装载到新建的图层实例。
5)把图层加载到MapControl控件。
代码实现
private void addShpToolStripMenuItem_Click(object sender,
EventArgs e)
{
//显示一个打开对话框
string filePath=string.Empty;
OpenFileDialog addShape=new OpenFileDialog();
addShape.Filter="Add Shape File|*.shp";
addShape.Title="Add Shape";
//点击确定按钮
if(addShape.ShowDialog()==DialogResult.OK)
{
//构造ShapeWorkspace工厂
IWorkspaceFactory factory=new
ShapefileWorkspaceFactory();
//利用工厂建立Workspace
IFeatureWorkspace
fileSpace=factory.OpenFromFile(addShape.FileName.Replace(addSha
pe.SafeFileName, string.Empty), 0) as IFeatureWorkspace;
//打开workspace中的一个图层(FeatureClass) IFeatureClass
featureClass=fileSpace.OpenFeatureClass(addShape.SafeFileName);
//建立一个Layer,并初始化。
IFeatureLayer layer=new FeatureLayer();
layer.FeatureClass=featureClass;
=featureClass.AliasName;
//将Layer加载到Mapcontrol中
this.axMap.Map.AddLayer(layer);
//刷新mapcontrol
this.axMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriView
Geography, layer, null);
}
}
(3)方法二:调用ICommand 接口加载数据:
private void addDataToolStripMenuItem_Click(object sender, EventArgs e) {
ICommand pCmd = new
ESRI.ArcGIS.Controls.ControlsAddDataCommandClass (); pCmd.OnCreate(this .axMapControl1.Object); pCmd.OnClick(); }
注意问题:
其中ICommand 接口需要有namespace ,通过Help 查找 Using system.windows.input ;
实现效果:
图1
图2
3.实现属性查询
(1)建立属性表:在主窗体增加控件:dataGridViewTable用来显示属性信息。
图3
(2)构建属性查询对话框,界面如下:
图4
(3)写属性查询对话框的触发事件
图5 (4)实现菜单Attribute Query功能:
图6 执行查询功能,结构如下:
图7
四、实验总结
通过此次实验,加强我对二次开发的理解,对于程序编写出错的地方,尤其要注意,这些问题可能在于你对窗体名称的混淆。
在操作过程中遇到很多问题,需要不断地调试程序,也体会到了程序员的艰辛。
同时我的VB 知识也忘了许多,在以后的学习中,还学要进一步加强VB 知识的学习。