1、 目录 1.实习目的:42.实习工具和环境:43.实习内容:4一、基于ArcGIS平台的空间数据库设计与建立41新建地理数据库42图层分类设计53空间数据库逻辑结构设计54空间数据库物理结构设计与实现55空间数据库地理参考系统的设置与坐标转换方法66空间几何信息入库;实体相关属性入库61)配准62)特征提取63)属性添加6二、ArcMap定制二次开发10菜单定制:10工具条定制:101.利用Customize对话框添加工具条102.利用宏定制工具条 ToolsMacros在Macros对话框定制宏并编辑功能113.例1.简单实现放大缩小,返回上一级,标记要素,打开layer图层等134.例2.
2、构建逻辑表达式查询空间几何对象144.实习总结:(*).191. 实习目的: 学习ArcGIS软件及其组成部分,并能灵活应用。 学习定制自己的工作空间,高效率的完成工作。 学习利用ArcCatalog建立地理信息数据库,属性入库。 学习利用VBA环境做简单的二次开发。2. 实习工具和环境: 工具:ArcMap、ArcCatalog 硬件环境:Microsoft Windows XP Professional 20023. 实习内容:一、 基于ArcGIS平台的空间数据库设计与建立实习目的:学习应用ArcGIS软件处理地理信息系统问题,学会使用ArcCatalog与ArcMap。步骤:1 新建地
3、理数据库 在ArcCatalog中建立如下的地理数据库 为个人数据库添加类和要素,属性 根据成都市交通运输图的地图的要素和类,把地图分为河流,道路,行政区域和边界,为每一个要素建一个表,选择坐标系统和添加要素的属性,结果图如下:2 图层分类设计 河流:面状河流,线状河流 行政区:行政中心,行政区域,运输中心 道路:公路,铁路3 空间数据库逻辑结构设计 面状河流:ployonriver 属性name 线状河流shpriver 属性name 行政区域xingzhengquyu属性 Maxnumber,Minnumber,name行政中心xingzhengzhongxin属性name 运输中心yun
4、shuzhongxin属性name公路gonglu 属性 name,Maxliuliang,Minliuliang 铁路tielu 属性 name4 空间数据库物理结构设计与实现 在ArcCatalog建库,建类,建要素,选择坐标系,添加属性,过程如下所示5 空间数据库地理参考系统的设置与坐标转换方法坐标投影采用高斯投影中的北京54(17带)投影坐标系6 空间几何信息入库;实体相关属性入库 将地图导入ArcMAP中进行校正,直到在误差的可允许范围之内.导入建好的数据库,然后开始分要素进行数字化,结果如图所示1) 配准:当载入bmp格式的成都市交通运输图时需要给地图进行配坐标系,选择坐标系为 高
5、斯投影中的北京54(17带)投影坐标系,添加四个控制点保证误差在10m以内., 单击Georeferencing-rectify进行配准.2) 特征提取:载入成都市交通图.mdb数据库,利用Arcmap中的选择相应图层矢量化并保存结果(即几何信息入库)3) 属性添加: 选中点、线或面状目标,右击,选择Attributes,弹出Attributes对话框,在对话框中设置目标的属性。(注释:自动生成的属性无法修改)4) 整饰地图:标记地图要素,修改要素符号、线条,改变要素颜色以便更好逼真的显示地图标记地图要素,修改要素符号、线条.右击要改变属性的图层,在Layer Properties对话框里可以
6、全方面修改图层的显示特性还可以设置简单的查询,连接等功能,更好的表现图层的属性依比例显示地图:7.地图数字化结果:二、 ArcMap定制二次开发 目的:学习制作自己的软件界面,学习基于ArcGIS平台的GIS项目的建立与实现的流程,学习简单的ArcMap二次定制开发。 实习步骤:(1)菜单定制(2)工具条定制(3)查询菜单定制:包括汉化,屏蔽一些功能,分组,向采单条添加新的功能。 ToolsCustomize,然后右键点击要汉化的菜单名,实现上面的功能 在Customize对话框选择相应的菜单条,把直接拖到采单条可以实现添加,拖动到Customize可以实现删除工具条定制:包括工具条的增删和用
7、宏定制工具条1. 利用Customize对话框添加工具条2. 利用宏定制工具条 ToolsMacros在Macros对话框定制宏并编辑功能例证:一个表示放大功能的宏示例如下 通过CustomizeCommandsMacros-Commands往工具条里面添加功能,可以改变标签的符号,颜色,实现分组等功能用界面的方式实现简单查询放大,缩小和查询功能 设计步骤:ToolsCustomizeCommandsUIControls单击Create and Edit按钮进入VBA编程环境 如图所示添加一个用户界面,就可以开始实现功能了3. 例1.简单实现放大缩小,返回上一级,标记要素,打开layer图层等
8、界面如下程序如下: 实现放大功能的代码 Private Sub CommandButton1_Click()Dim pDoc As IMxDocumentDim pEnv As IEnvelopeSet pDoc = ThisDocumentSet pEnv = pDoc.ActiveView.ExtentpEnv.Expand 0.5, 0.5, TruepDoc.ActiveView.Extent = pEnvpDoc.ActiveView.RefreshEnd Sub实现缩小功能的代码Private Sub CommandButton2_Click()Dim pDoc As IMxDoc
9、umentDim pEnv As IEnvelopeSet pDoc = ThisDocumentSet pEnv = pDoc.ActiveView.ExtentpEnv.Expand 2, 2, TruepDoc.ActiveView.Extent = pEnvpDoc.ActiveView.RefreshEnd Sub 返回上一层代码Private Sub CommandButton3_Click()macro:FullExtentPlusDim IntAns As IntegerDim PItem As ICommandItemWith ThisDocument.CommandBars
10、Set PItem = .Find(ArcID.PanZoom_FullExtent)IntAns = MsgBox(Zoom to previous extent?, vbYesNo)If IntAns = vbYes ThenSet PItem = .Find(ArcID.PanZoom_ZoomToLastExtentBack)PItem.ExecuteElseEnd IfEnd WithEnd Sub 标记要素的代码Private Sub CommandButton4_Click() Dim filePath As String filePath = c:arcgisarcexe83A
11、rcObjects Developer KitsamplesdataUSAstates.lyr Dim pGxLayer As IGxLayer Dim pGxFile As IGxFile Set pGxLayer = New GxLayer Set pGxFile = pGxLayer pGxFile.Path = filePath Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument pMxDoc.FocusMap.AddLayer pGxLayer.LayerEnd Sub添加图层的代码Private Sub CommandButton
12、5_Click() Dim pMxDoc As IMxDocument Dim pGraphicsContainer As IGraphicsContainer Dim pActiveView As IActiveView Dim pTextElement As ITextElement Dim pElement As IElement Set pMxDoc = Application.Document Set pGraphicsContainer = pMxDoc.FocusMap Set pActiveView = pMxDoc.FocusMap Set pTextElement = Ne
13、w TextElement Set pElement = pTextElement pTextElement.Text = X marks the spot pElement.Geometry = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y) pGraphicsContainer.AddElement pTextElement, 0 pActiveView.PartialRefresh esriViewGraphics, Nothing, NothingEnd Sub4. 例2.构建逻辑表达式查询空间几何对象
14、界面设计如下: 运行界面:ButtonTextBox1按钮ComboBox1ListBox1 (一) 代码如下程序1:根据ComboBox1选择的图层不同ListBox1用ComboBox选择图层后,通过ListBox显示图层各属性,通过ListBox的Text属性来选择图层的属性。Private Sub ComboBox1_Change() 定义文档对象 Dim pMxDoc As IMxDocument 定义地图对象 Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pILayer As IL
15、ayer Dim pLayer As IFeatureLayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pILayer = pMap.Layer(i) If pILayer.Name = ComboBox1.Text Then Set pLayer = pILayer Exit For End If Next i Dim pFClass As IFeatureClass Set pFClass = pLayer.FeatureClass Dim intLoop As Integer Dim str As String str
16、 = ListBox1.Clear For intLoop = 0 To pFClass.Fields.FieldCount - 1 str = + pFClass.Fields.Field(intLoop).Name ListBox1.AddItem str Next intLoop For i = 0 To pFClass.Fields.FieldCount - 1 str = + pFClass.Fields.Field(i).Name + & + str Next i ListBox1.AddItem strEnd Sub 根据查询条件显示查询结果,高亮度显示查询结果Private S
17、ub ComboBox1_Change() 定义文档对象 Dim pMxDoc As IMxDocument 定义地图对象 Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pILayer As ILayer Dim pLayer As IFeatureLayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pILayer = pMap.Layer(i) If pILayer.Name = ComboBox1.Text Then Se
18、t pLayer = pILayer Exit For End If Next i Dim pFClass As IFeatureClass Set pFClass = pLayer.FeatureClass Dim intLoop As Integer Dim str As String str = ListBox1.Clear For intLoop = 0 To pFClass.Fields.FieldCount - 1 str = + pFClass.Fields.Field(intLoop).Name ListBox1.AddItem str Next intLoop For i =
19、 0 To pFClass.Fields.FieldCount - 1 str = + pFClass.Fields.Field(i).Name + & + str Next i ListBox1.AddItem strEnd Sub实现按钮功能的如下:Private Sub CommandButton9_Click()TextBox1.Text = TextBox1.Text + AndEnd SubPrivate Sub ListBox1_Click()TextBox1.Text = TextBox1.Text + ListBox1End Sub加载图层代码:通过ComboBox显示各图层
20、,并通过循环遍历各图层,从而寻找选中的图层。Private Sub UserForm_Activate() Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Dim i As Integer ComboBox1.Clear For i = 0 To pMap.LayerCount - 1 Set pLayer = pMap.Layer(i) ComboBox1.AddItem pLayer.Name Next i
21、 ComboBox3.Text = Creat a new LayerEnd Sub查询示例1:查询 行政区域的都江堰市,红色区域为查询结果都江堰市查询语句选择图层字段选择图层查询示例2: 查询行政区域的车流量大于2000的区域 Maxnumber2000查询结果4. 实习总结: 一、完成的任务: 1 基于ArcGIS平台的空间数据库设计与建立1)图层分类设计2)空间数据库逻辑结构设计3)空间数据库物理结构设计与实现4)空间数据库地里参考系统的设置5)空间几何信息入库,实体相关属性入库2 ArcMap二次定制开发1)菜单定制2)工具条定制3)扩展模块编程与集成4)由空间几何信息查询相关属性信息
22、5)构建逻辑表达式查询空间几何对象 二、个人认为此次实习难点(主要针对ArcMap定制二次开发) 1)不清楚ArcGIS内部的接口,类,方法,不清楚ArcGIS的实现逻辑和功能模式,以至于在实现功能时不知道从那里下手,遇到了很大的麻烦。 2)对于组合框Combobox、ListBox的功能和语法不清楚,不会应用简单的语句来实现功能。 3)不会转化问题,把此次而次开发想的难度太大,没有当一个普通的编程题目来做,那样速度会更快。 三、个人体会 这次实习围绕ArcMap解决实际问题的开发的一个完整生命周期,包括建地理信息数据库,属性入库,定制菜单条工具条,增删功能, 设置图层的显示属性,利用宏来实现
23、一些特殊的功能,实现一个有利于解决问题的界面环境。收获非常的大,加深了对应用软件开发过程的理解,对自己的编程能力也是一个警告和提高。同时明白,在开发过程过一个人力量是很微弱的,只有大家一起积极讨论提出自己的看法才能加快开发流程,更好的实现功能,所以以后一定要注意多交流观点。 ArcGIS个人实习总结 一、完成的任务: 1 基于ArcGIS平台的空间数据库设计与建立1)图层分类设计2)空间数据库逻辑结构设计3)空间数据库物理结构设计与实现4)空间数据库地里参考系统的设置5)空间几何信息入库,实体相关属性入库2 ArcMap二次定制开发1)菜单定制2)工具条定制3)扩展模块编程与集成4)由空间几何
24、信息查询相关属性信息5)构建逻辑表达式查询空间几何对象 在实习中我遇到了很多的问题,有编程方面的,有数字化方面。但是经过努力后好多问题都得到了解决,实习对我们是很有益的,特别是对我们的自学能力有很大的提高。 二.实习中遇到的主要问题: 1.基于ArcGIS平台的空间数据库设计与建立的方面遇到的问题: (1)图层分类 在地图中选择分类图层时很难把各种地图要素合理的进行分类,也就是在图层设计时,很难宏观的把握,还好老师给的地图是一张成都交通地图,图上的要素并不是很多,经过和其他同学的交流取经,最后得到了一个我觉得还比较合理的分类。 (2).对ArcGIS软件的很多功能不熟悉 有了对图层的分类也就有了对数据库的结构,因此就没有遇到设计方面的问题,这次的问题主要是不会使用ArcGIS软件的功能,例如在对行政区域的边界进行数字化时,产生公共边不重合的问题,主要就是不知道ArcGIS软件具有Tace Tool这个功能键。因此吃了不少的亏。还有很多类似的问题就不一一的列举了。 三。ArcMap二次定制开发 由空间信息查询相关属性信息 主要的难点都是编程方面的,VB语言是我没有学习过的,所以肯定是有困难的。老师给的相关资料有很多看不懂,问同学也不是全部能得到解决。