为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

GIS开发_02_桌面GIS开发1

2014-01-15 42页 pdf 2MB 29阅读

用户头像

is_034893

暂无简介

举报
GIS开发_02_桌面GIS开发1 2012/3/5 1 桌面GIS开发(一) DESKTOP GIS DEVELOPMENT 1 GIS开发 Email:gis.ecnu@gmail.com 桌面GIS开发 桌面GIS扩展模块开发  作用:扩展现有GIS系统功能  开发方式: 直接使用脚本语言对ArcGIS软件功能进行扩展: ArcObjects+VBA 利用支持COM的开发语言,调用ArcObjects库,开发DLL;在 ArcGIS软件(例如ArcMap)中调用DLL,例如: ArcObjects+Visual Basic.Net...
GIS开发_02_桌面GIS开发1
2012/3/5 1 桌面GIS开发(一) DESKTOP GIS DEVELOPMENT 1 GIS开发 Email:gis.ecnu@gmail.com 桌面GIS开发 桌面GIS扩展模块开发  作用:扩展现有GIS系统功能  开发方式: 直接使用脚本语言对ArcGIS软件功能进行扩展: ArcObjects+VBA 利用支持COM的开发语言,调用ArcObjects库,开发DLL;在 ArcGIS软件(例如ArcMap)中调用DLL,例如: ArcObjects+Visual Basic.Net 组件式GIS开发  作用:开发独立的GIS系统  开发方式: 利用开发语言,调用ArcGIS Engine 组件和ArcObjects库,例如 :ArcGIS Engine +ArcObjects+Visual Basic.Net 不同编程语言编写代码的对比  Visual Basic 1. Dim pFLayer As IFeatureLayer 2. Set pFLayer = New FeatureLayer 3. Set pFLayer.FeatureClass = pShapefile 4. Dim pLayer As ILayer 5. Set pLayer = pFLayer 6. pLayer.Name = "Mass Points"  C# 1. IFeatureLayer pFLayer; 2. pFLayer = new FeatureLayerClass(); 3. pFLayer.FeatureClass = pShapefile; 4. ILayer pLayer; 5. pLayer = pFLayer as ILayer; 6. pLayer.Name = "Mass Points"; 桌面GIS扩展模块开发(1) 提要  ArcGIS Desktop应用系统开发的基本方法  定制系统界面  地图与图层  数据加载  地图渲染  数据查询  数据创建与编辑  命令及工具的调用  其它组件的添加 桌面GIS扩展模块开发(1) 内容提要  ArcGIS Desktop应用系统开发的基本方法  定制系统界面  地图与图层  数据加载  地图渲染  数据查询  数据创建与编辑  命令及工具的调用  其它组件的添加 开发步骤  ArcGIS Desktop应用系统(以ArcMap为例)  启动ArcMap,进入ArcMap应用系统  根据用户需求,定制系统界面(删除和增加命令)  对新增的命令,在VBE(Visual Basic Editor)环境中通过 VBA和AO编写相应程序代码  保存系统 2012/3/5 2 进入ArcMap应用系统的方式 启动ArcMap时,有三种方式进入ArcMap应用系统:  新建一个空白文档。  选择一个模板新建文档。  打开一个已存在的地图文档。 新建一个空白文档 当选择新建一个空白文档时,系统将显示普通模板文 件(Normal.mxt)定义的界面,并加载存放在该文件 中的程序代码。  Normal.mxt是ArcMap固有的文件,存放在 Documents and Settings\用户名\ESRI\ArcMap\Templates (Windows XP)或者C:\Users\用户名 \AppData\Roaming\ESRI\ArcMap\Templates (Windows 7)目录下。 新建的空白文档缺省的文件名为Untitled.mxd(无标 )。 选择一个模板新建文档 当选择一个模板新建文档时,系统首先是加载普通模 板的定制信息和程序代码,然后再加载选中模板(称 为基础模板,mxt文件)的定制信息和程序代码。 新建的文档缺省的文件名为Untitled.mxd。 打开一个已存在的地图文档 当选择打开一个已存在的地图文档时,首先是加载普 通模板的定制信息和程序代码,然后在加载基础模板 的定制信息和程序代码(如用到的话),最后是加载 项目文件本身的定制信息和程序代码。 界面定制  ArcMap提供了Customize对话框,可用于界面定制, 包括增加工具条、在工具条中增加命令、改变命令的 显示形式等。 界面定制时需要确认定制信息保存在哪个文件中。 2012/3/5 3 代码编写 在ArcMap应用系统中, 点击Alt+F11,打开VBA 编辑器 在编辑器的项目管理窗 口中,将显示普通模板 项目(Normal.mxt)和 当前的地图文档项目, 如当前地图文档应用了 基础模板,则还显示所 应用的基础模板项目 代码编写 每个项目下面都有一个ThisDocument模块,用于存放 定制命令的程序代码,此外,每个项目下面都可以新 增窗体模块、标准模块和类模块,用于存放相应的程 序代码。 存放在不同项目中的代码,它们的作用范围是不一样 的。  存放在普通模板中的代码将应用到所有文档。  存放在基础模板中的代码将应用到所有利用该模板的文 档。  存放在当前地图文档中的代码只应用到该文档。 一般情况下,代码存放在当前的地图文档中。 宏的编写与运行 宏是一个子过程,可以被项目中其它代码调用,也可 以在宏对话框中直接运行。 点击Tools|Macros|Macros,将显示宏对话框,可以新 建宏并在VBE中编写代码,也可以运行已有的宏。 需要注意宏的存放位置。 宏对话框 AO编程的入口 当我们启动ArcMap,新建或打开一个地图文档( mxd文件)时,已经有两个对象在使用,分别是:  Application对象,对应的系统已声明的变量名为 Application  MxDocument对象,对应的系统已声明的变量名为 ThisDocument 这两个对象是AO编程的入口 AO编程的入口——Application  Application指向当前应用(在ArcMap中,指向 ArcMap应用;在ArcCatolog中,指向ArcCatolog应用 ),缺省的接口为IApplication接口。主要的属性与 方法:  Caption:当前应用的标题,可读写。  Name:当前应用的名称,只读。  RefreshWindow:刷新窗口。 例如:Application.Caption = "上海市环境地理信息系 统" 2012/3/5 4 AO编程的入口——ThisDocument  ThisDocument指向当前打开的地图文档,缺省的接口 为IDocument接口。主要属性与方法:  Title:标题,只读。  Type:文件类型(普通模板、基础模板、地图文档), 只读。  AddLayer:增加图层。 例如:MsgBox ThisDocument.Title 系统保存 系统可以保存为文档文件(mxd文件),也可以保存 为基础模板文件(mxt文件),此外,在界面定制和 编写代码时,可以把定制信息和程序代码保存到普通 模板文件中(Normal.mxt)。 系统保存作用范围  普通模板文件中的定制信息和程序代码是全局的,会应 用到所有的地图文档中。  基础模板文件中的定制信息和程序代码会应用到所有以 该模板为基础的地图文档中  地图文档文件的定制信息和程序代码只应用到该地图文 档 桌面GIS扩展模块开发(1) 内容提要  ArcGIS Desktop应用系统开发的基本方法  定制系统界面  地图与图层  数据加载  地图渲染  数据查询  数据创建与编辑  命令及工具的调用  其它组件的添加 系统界面的定制内容  ArcMap应用系统界面的定制包括:  菜单条( Main Menu )的定制  工具条(Toolbars)的定制  上下文菜单(Context Menu)的定制 系统界面的定制内容——菜单  ArcMap只有一个菜单条(Main Menu),是由菜单 所组成,菜单下可以包括子菜单和菜单项。菜单条的 定制包括:  新增菜单。  在已有的菜单中增加子菜单和菜单项。  更改菜单、子菜单和菜单项的属性。 2012/3/5 5 系统界面的定制内容——工具条 在ArcMap中,有许多工具条,每个工具条是相关命 令的集合。工具条的定制包括:  显示或关闭工具条  新增工具条  在工具条中增加要素(可以增加的要素包括菜单、按钮、 工具、文本框和组合框)  更改工具条组成要素的属性 组成工具条的要素 系统界面的定制内容——上下文菜单 上下文菜单(Context Menu)只有当我们右击鼠标时 才显示。  ArcMap有缺省的上下文菜单,会根据不同的情况显 示不同的上下文菜单(如在编辑状态下,选择Sketch Tool,显示和Sketch相关的上下文菜单)。 用户可以根据不同的情况显示自定义的上下文菜单。 系统界面的定制内容 菜单条、工具条、上下文菜单和菜单实际上都是相关 命令的集合,在AO中统称为命令条(CommandBar )。 菜单项、按钮和工具都是和应用程序相关联,统称为 命令(CommandItem)。 系统界面的定制内容 每个命令条和命令都有一个唯一标识码(Unique Identification Number),称为GUID或UID。  UID是保存在操作系统中的一个由字母与数字组成的 32位长字符串,如New Map命令的UID{119591DB- 0255-11D2-8D20-080009EE4E51}。 在ArcGIS的开发帮助中,我们可以找到显示所有命 令条和命令的GUID(搜索ArcMap IDs)。 GUID表 2012/3/5 6 系统界面定制的方法 通过Customize对话框 通过编程方法 通过Customize对话框 通过Customize对话框可以定义系统用户界面,包括:  新建工具条  在菜单条或工具条中加载已有的命令或新建命令  定义命令的属性 新建工具条 在Customize对话框中,点击New,然后在New Toolbar对话框中输入工具条名称,并确定新建工具 条是保存在某个应用程序模板中,还是保存在通用模 板中(Normal.mxt)。 增加命令 新增工具条是一个空的工具条,我们可以根据需要在 工具条增加命令。 点击Customize对话框中的Commands选项卡,将显示 可以增加到工具条中的命令。其中,左边显示的是类 别,右边显示的是选中类别下的命令。 每个类别下有多个命令 增加命令 通过拖拉方式可以把选中命令增加到工具条中;同样, 通过拖拉方式可以删除工具条中命令(把工具条中的 命令拖拉到工具条之外区域)。 可以把命令拖放到工具条中 2012/3/5 7 增加命令 也可以在Customize对话框中新建命令,并增加到工 具条中。 在Categories中选择New Menu,可以新建菜单;选择 UIControls可以新建按钮、工具、文本框和组合框。 新建菜单 新建菜单方法:  在Categorie中选择New Menu,并把Commands列表中的 New Menu拖拉到工具条中作为菜单或子菜单(但不能作 为菜单项)。  只有按钮可以拖放到菜单或子菜单下作为菜单项。 新建用户界面控件 新建用户界面控件(user interface controls,简称 UIControls)方法:  在Categorie下选中UIControls,点击New UIControl,将出 现对话框用于选择UIControl类型,有四种类型UIControls: UIButton,UITool,UIComboBox,UIEditBox。 新建用户界面控件 选择后,点击Create,一个新的UIControl将增加到 UIControls类别下的Commands列表中,但需要连接 相应程序才能实现功能。 定义命令的显示属性 选中工具条中的某个命令,右击鼠标,将出现命令显 示属性的对话框。命令可以以文本显示,也可以以 图标显示,或同时显示。可以改变显示的文本和图标。 通过编程方法 利用定制对话框定制界面方法简单,但定制的界面不能 在系统运行过程中改变。 通过编程方法定制对话框,可以动态地改变系统界面, 例如:  增加一个图层后,自动增加一个计算属性值的按钮。  点击一个要素时,显示自定义的快捷菜单。  根据用户操作情况,控制命令是否有效。 2012/3/5 8 主要的类与接口 详见Application Framework对象模型图 主要的类与接口——CommandBars类  CommandBars类  CommandBars对象是一个文档中所有有效命令条(工具 条、菜单条和快捷菜单)的集合。通过IDocument接口的 CommandBars属性可以得到当前文档的命令条集合( CommandBars 对象)。CommandBars类只有一个接口( ICommandBars)。 ICommandBars接口 主要的类与接口——CommandBars类  CommandBars类  ICommandBars 的Find方法可以返回当前文档中任何可用 的命令(CommandItem),它使用UID(唯一标识码)来 查找命令。由于UID不易记忆,在Normal.mxt中,有一个 ArcID模块,该模块定义了每个UID的名称,因此我们可 以通过命令的名称来得到UID,如arcid.File_AddData。 Find(identifier, [noRecurse As Boolean = False], [noCreate As Boolean = False]) As ICommandItem 主要的类与接口——CommandBars类  CommandBars类  ICommandBars接口的Create方法用来产生新的命令条, 有两个参数: 命令条名称 类型(工具条、菜单或快捷菜单)。 Create(Name As String, barType As esriCmdBarType) As ICommandBar 主要的类与接口——CommandBar类  CommandBar类  CommandBar的主 要接口是 ICommandBar接口 (缺省接口)和 ICommandItem接口 。后者是把工具条 看成一个命令项, CommandItem类也 拥有该接口。 ICommandBar接口 主要的类与接口——CommandBar类  CommandBar类  ICommandBar的Dock方法用于显示工具条。参数 dockFlags是一个枚举类,枚举类的值定义了工具条的放 置位置。  ICommandBar接口的Popup方法是以上下文菜单形式显示 命令条。 Dock(dockFlags As esriDockFlags, [referenceBar As ICommandBar]) Popup([X As Long], [Y As Long]) As ICommandItem 2012/3/5 9 主要的类与接口——CommandBar类  CommandBar类  ICommnadBar接口的CreateMenu方法用于在命令条的指定 位置产生一个菜单。有两个参数:  Name,新建菜单名称。  Index,索引(可选)。 CreateMenu(Name As String, [Index]) As ICommandBar 主要的类与接口——CommandBar类  CommandBar类  ICommnadBar接口的CreateMacroItem方法用于把文档中 的宏加入到命令条中。参数包括:  Name:与命令一起显示的字符串。  FaceID:标准ArcGIS图标的代码(可选)。  Action :宏名(必须加宏所在的项目和模块名)。  Index:索引(可选)。 CreateMacroItem(Name As String, [FaceID], [Action As String], [Index]) As ICommandItem 主要的类与接口——CommandItem类  CommandItem类  CommandItem的最主要 接口是ICommandItem, 通过该接口可以存取命 令的属性,如标题、按 钮图像、状态栏的消息 、工具提示、显示风格 、帮助文档的ID等。此 外,通过该接口的 Execute方法可以执行该 命令。 ICommandItem接口 查找一个工具条并显示 利用ICommandBars的Find方法和ICommandBar的 Dock方法。 Dim pToolBar As ICommandBar Set pToolBar = ThisDocument.CommandBars.Find(arcid.Adjustment_ AdjustmentToolBar) pToolBar.Dock esriDockFloat 新增工具条并增加已有命令 利用CommandBars的Create方法,命令条的类型为 Toolbar。 Dim pToolBar As ICommandBar Dim pTool As ICommandItem Set pToolBar = ThisDocument.CommandBars.Create("myToolBar", esriCmdBarTypeToolbar) Set pTool = pToolBar.Add(arcid.PanZoom_Pan) Set pTool = pToolBar.Add(arcid.PanZoom_FullExtent) 新增工具条并增加菜单和菜单项  ICommandBar的CreateMenu和CreateMacroItem方法。 Dim pToolBar As ICommandBar Dim pMenu As ICommandBar Dim pTool As ICommandItem Set pToolBar = ThisDocument.CommandBars.Create("myToolBar2", esriCmdBarTypeToolbar) Set pMenu = pToolBar.CreateMenu("ShowInformation") Set pTool = pMenu.CreateMacroItem("DocumentTitle", 1, "Project.Module1.DocumentTitle") 2012/3/5 10 创建新的上下文菜单 利用CommandBars的Create方法,命令条的类型为 ShortcutMenu。 Dim pMenu As ICommandBar Set pMenu = ThisDocument.CommandBars.Create("New", esriCmdBarTypeShortcutMenu) pMenu.Add arcid.File_AddData pMenu.Add arcid.File_Export pMenu.Add arcid.File_Print pMenu.Popup 显示不同的上下文菜单  MxDocument对象支持OnContextMenu事件(即在数 据显示区右击鼠标)。右击鼠标时,我们可以根据鼠 标位置(X、Y坐标)或其它情况显示不同上下文菜 单。  OnContextMenu事件返回一个布尔值作为结果。如果 返回的值为False,则显示标准的上下文菜单;如果 返回的值为True,则不显示标准的上下文菜单; 显示不同的上下文菜单 实例:根据用户选择的工具,显示不同的上下文菜单 。先定义一个模块级变量,在工具选择事件中,对变 量进行赋值。 Dim ContextMenu As String Private Sub myTool_Select() ContextMenu = "myTool" End Sub Private Sub myTool2_Select() ContextMenu = "myTool2" End Sub Private Function MxDocument_OnContextMenu(ByVal x As Long, ByVal y As Long) As Boolean Dim pMenu As ICommandBar Select Case ContextMenu Case "myTool" Set pMenu = ThisDocument.CommandBars.Create("myTool", esriCmdBarTypeShortcutMenu) pMenu.Add arcid.File_AddData pMenu.Add arcid.File_Export pMenu.Add arcid.File_Print pMenu.Popup MxDocument_OnContextMenu = True Case "myTool2" Set pMenu = ThisDocument.CommandBars.Create("myTool2", esriCmdBarTypeShortcutMenu) pMenu.Add arcid.File_Exit pMenu.Add arcid.File_New pMenu.Add arcid.File_LabelCache pMenu.Popup MxDocument_OnContextMenu = True Case Else MxDocument_OnContextMenu = False End Select End Function 获取新增工具条的UID 命令条的ID属性在ICommandItem接口,通过接口查 询方法使ICommandItem接口变量指向新增工具条。 Dim pToolBar As ICommandBar Dim pToolBarItem As ICommandItem Set pToolBar = ThisDocument.CommandBars.Create("myToolBar", esriCmdBarTypeToolbar) Set pToolBarItem = pToolBar MsgBox pToolBarItem.ID 2012/3/5 11 改变命令的提示信息 利用ICommandItem的Tooltip属性改变命令的提示信 息。 Dim pToolBar As ICommandBar Dim pTool As ICommandItem Set pToolBar = ThisDocument.CommandBars.Create("myToolBar", esriCmdBarTypeToolbar) Set pTool = pToolBar.CreateMacroItem("ShowDocTitle", 1, "Project.Module1.DocumentTitle") pTool.Tooltip ="显示文档属性" 桌面GIS扩展模块开发(1) 内容提要  ArcGIS Desktop应用系统开发的基本方法  定制系统界面  地图与图层  数据加载  地图渲染  数据查询  数据创建与编辑  命令及工具的调用  其它组件的添加 地图与图层概念  ArcMap应用是由单个MxDocument对象组成,一个 MxDocument对象可以包括多个Map对象(在ArcMap 中称为Data Frame),而每个Map可以包括多个Layer 对象。 在任何时候,只有一个Map是可见和可操作的,称为 FocusMap。可以在ArcMap中通过Activate命令使选中 Map成为FocusMap 。 地图与图层概念  ArcGIS中的图层(Layer)有多种类型,分别用于显示 不同类型数据,包括:  FeatureLayer,显示矢量数据  RasterLayer,显示栅格数据  TINLayer,显示TIN数据  CadLayer,显示CAD数据  …… 最常用的Layer是FeatureLayer,即矢量图层,可以显 示Shapefile、Coverage以及Geodatabase等矢量数 据。 相关的类与接口 对象模型图 MxDocument类  MxDocument类的接口包 括IDocument、 IMxDocument等。预定义 变量ThisDocument的接口 是IDocument ,它提供不 同类型文档共有的属性与 方法。IMxDocument接口 提供针对地图文档的属性 与方法。 IMxDocument接口的属性与方法 2012/3/5 12 MxDocument类  IMxDocument接口的主要属性与方法:  FocusMap,返回当前地图。  SelectedLayer,返回选中的图层。  AddLayer(Layer),在当前地图中增加图层。 Map类  Map类的接口包括IMap、IActiveView等。 IMap接口 用于对Map中图层的操作及Map特性的操作。 IActiveView接口用于对Map视图的操作。 IM ap 的属性与方法 Map类  IMap的主要属性与方法:  LayerCount,返回当前地图中的图层数。  Layer(i),返回地图中第i个图层。  Name,返回或设置地图的名称。  SpatialReference,返回或设置当前地图的空间参照。  AddLayer(Layer),增加一个图层。  DeleteLayer(Layer),删除一个图层。  ClearLayers,清除所有图层。 IActiveView接口的属性与方法 Map类  IActiveView接口的主要属性与方法:  Extent,返回或设置当前视图的范围,返回或设置的对象 是Envelope对象(矩阵)。  FullExtent,返回或设置Map中所有图层的最大范围,返 回或设置的对象是Envelope对象(矩阵)。  Refresh,刷新整个视图。 Layer类  Layer类的主要接口是ILayer接口,该接口提供了不同 类型Layer所共有的属性与方法,包括:  Name,返回或设置图层名称。  MaximumScale,返回或设置最大比例尺。  MinimumScale,返回或设置最小比例尺。  Visible,返回或设置Layer是否可见。 2012/3/5 13 ILayer接口的属性与方法 FeatureLayer类  FeatureLayer类的主要接口:  IFeatureLayer接口,是从ILayer接口继承下来的,所以 IFeatureLayer接口支持ILayer接口的所有属性和方法。另 外,它还有一些自己的属性和方法,决定它的数据源类 型、显示的字符、符号是否随比例尺变化等。  IGeoFeatureLayer接口,继承IFeatureLayer接口,用于对 FeatureLayer的地图渲染等。 FeatureLayer类  IFeatureLayer接口的主要属性与方法:  FeatureClass,返回或设置与图层关联的数据集。  Search(queryFilter, recycling ),数据查询。 其它Layer 其它Layer的接口及相应的属性与方法可查阅 “CartoObjectModel.pdf”对象模型图。 显示当前Map的空间参照名称 通过MxDocument对象的IMxDocument接口的 FocusMap属性获得当前地图对象,根据IMap接口的 SpatialReference属性空间参照对象,再根据空间参照 对象的Name属性获得当前空间参照对象的名称。 Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap MsgBox pMap.SpatialReference.Name 显示当前Map的空间参照名称 改变地图的显示范围  Map对象的IActiveView接口的Extent属性返回 Envelope对象(IEnvelope接口)。  IEnvelope接口有Height、Width、Xmin、Xmax、 Ymin、Ymax等属性,有Expand、Offset、CenterAt等 方法。 通过IEnvelope接口的属性与方法可以改变Envelope对 象的大小和位置,把新的Envelope对象赋给Map对象 的Extent属性,将改变地图的显示范围。 要重新显示地图,需要对当前视图进行刷新,可通过 IActiveView接口的Refresh方法。 2012/3/5 14 Dim pMxDoc As IMxDocument Dim pActiveView As IActiveView Dim pExtent As IEnvelope Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Set pActiveView = pMap Set pExtent = pActiveView.Extent pExtent.Expand 0.5, 0.5, True pActiveView.Extent = pExtent pActiveView.Refresh 地图放大 显示选中图层的名称 利用IMxDocument的SelectedLayer属性获得选中图层 ,利用ILayer的Name属性获得图层的名称。 执行命令时,用户可能没有选中图层,需要增加一个 判断语句(对象变量没有引用,则返回Nothing)。 Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pLayer As ILayer Set pLayer = pMxDoc.SelectedLayer If Not pLayer Is Nothing Then MsgBox pLayer.Name Else MsgBox "No selected layer" End If 显示选中图层的名称 设置图层的最大和最小比例尺 通过设置图层的最大和最小比例尺,可以根据地图的 显示比例尺控制图层是否显示。  如定义了最大比例尺(Maximum Scale),当地图的显示 比例尺大于最大比例尺时,该图层不显示。  如定义了最小比例尺(Minimum Scale),当地图的比例 尺小于最小比例尺时,该图层不显示。 Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Set pLayer = pMap.Layer(0) pLayer.MinimumScale = 50000000 Dim pActiveView As IActiveView Set pActiveView = pMap pActiveView.Refresh 设置图层的最小比例尺 Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Set pLayer = pMap.Layer(0) pLayer.MaximumScale = 10000000 Dim pActiveView As IActiveView Set pActiveView = pMap pActiveView.Refresh 设置图层的最大比例尺 2012/3/5 15 Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Set pLayer = pMap.Layer(0) pLayer.MaximumScale = Empty pLayer.MinimumScale = Empty Dim pActiveView As IActiveView Set pActiveView = pMap pActiveView.Refresh 清除比例尺设置 创建新图层并增加到地图集合中 在AO中,Layer是一个抽象类,是不能创建的,但它 的子类(FeatureLayer、RasterLayer、TinLayer等)都 可以用New关键字创建。 利用ILayer接口的Name属性可以对图层进行命名。 利用Map对象的AddLayer方法可以把新创建的图层加 到地图集合中。新创建的图层是一个空的图层。 Dim pFLayer As ILayer Set pFLayer = New FeatureLayer pFLayer.Name = "Shanghai Map" Dim pMxDoc As IMxDocument Dim pMap As IMap Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap pMap.AddLayer pFLayer 桌面GIS扩展模块开发(1) 内容提要  ArcGIS Desktop应用系统开发的基本方法  定制系统界面  地图与图层  数据加载  地图渲染  数据查询  数据创建与编辑  命令及工具的调用  其它组件的添加 数据类型与存储  GIS中的数据主要有以下几种类型:  矢量数据  栅格数据  TIN数据  数据  关系数据  …… 数据的存储位置(路径或数据库)统称为工作空间 (Workspace)。 数据类型与存储  ArcGIS支持多种形式的数据存储方式,包括:  Shapefile文件形式,存储矢量数据。一个矢量数据有多个 文件,存放在同一路径下。  Raster文件形式,存储栅格数据,有GRID、 TIFF、JPEG 、ERDAS IMAGINE等格式,相关文件存放在同一路径下 。  TIN文件形式,存储TIN数据。一个TIN数据实际上是一 个文件夹,文件夹中包含相关文件。  Personal Geodatabase形式,存储矢量、栅格、TIN等数据 ,所有数据存放在Access数据库。  SDE Geodatabase形式,存储矢量、栅格、TIN等数据, 所有数据存放在SDE数据库。  …… 2012/3/5 16 相关的类与接口 Workspace类 数据的存储位置称为Workspace,可以是一个路径或 数据库。访问磁盘上数据的第一步就是要确定 Workspace对象,一旦确定了一个Workspace,就可以 访问其中的数据。  Workspace类是一个规则Class(可实例化,但不能创 建)。因此,必须要通过其它对象获取该类的对象。 为了获得一个现存的Workspace,要用 WorkspaceFactory对象实例化一个Workspace。 Workspace类  Workspace的类型:  File system Workspace  Shapefile Workspace  Raster Workspace  Tin Workspace  CAD Workspace  VPF Workspace  ……  Local database Workspace  Remote database Workspace 同一个路径下可以有不同类型的数据,如Shapefile 、Raster、 Tin等,但访问不同类型的数据,必须要定义不同的工作空间。 WorkspaceFactory类  WorkspaceFactory是抽象类,它有 AccessWorkspaceFactory、 TinWorkspaceFactory、 ShapefileWorkspaceFactory等可新建的 子类,这些子类都具有 IWorkspaceFactory接口。 WorkspaceFactory的子类 WorkspaceFactory类 利用IWorkspaceFactory接口的OpenFromFile方法可以 创建一个工作空间。该方法返回的Workspace对象的 类型是和WorkspaceFactory类型相对应的,缺省的接 口均为IWorkspace接口,但同时具有相应的其它接口, 如Shapefile Workspace具有IFeatureWorkspace;Raster Workspace具有IRasterWorkspace接口;Tin Workspace 具有ITinWorkspace。 OpenFromFile(fileName As String, hWnd As OLE_HANDLE) As IWorkspace IFeatureWorkspace接口  IFeatureWorkspace接口的OpenFeatureClass方法用于 打开当前工作空间下的要素类(矢量数据),该方法 返回FeatureClass对象。 OpenFeatureClass(Name As String) As IFeatureClass 2012/3/5 17 IRasterWorkspace接口  IRasterWorkspace接口的OpenRasterDataset方法用于 打开当前工作空间下的栅格数据,该方法返回 RasterDataset对象。 OpenRasterDataset(Name As String) As IRasterDataset ITinWorkspace接口  ITinWorkspace接口的OpenTin(“文件名”)方法用于打 开当前工作空间下的TIN数据,该方法返回TIN对象。 OpenTin(Name As String) As ITin 图层与数据进行关联 矢量图层与数据关联 Set pFLayer.FeatureClass = 数据 栅格图层与数据关联 pRLayer.CreateFromDataset 数据  TIN图层与数据关联 Set pTLayer.Dataset = 数据 注意:栅格图层与数据的关联与矢量图层和TIN图层有所不同。 加载Shapefile数据 步骤:  新建ShapefileWorkspaceFactory对象。  利用OpenFromFile方法产生一个工作空间。  利用IFeatureWorkspace接口的OpenFeatureClass方法打开 要加载的Shapefile图层数据,并赋值给新建的矢量图层。  利用IMxDocument的AddLayer把新建图层加载到当前Map 中。  利用ILayer的Name属性对图层的名称进行赋值。 Dim pWFactory As IWorkspaceFactory Set pWFactory = New ShapefileWorkspaceFactory Dim pWorkspace As IWorkspace Set pWorkspace = pWFactory.OpenFromFile("D:\MGIS\mgisdata\BlackHills", 0) Dim pFWorkspace As IFeatureWorkspace Set pFWorkspace = pWorkspace Dim pShapefile As IFeatureClass Set pShapefile = pFWorkspace.OpenFeatureClass("bhrain3") Dim pFLayer As IFeatureLayer Set pFLayer = New FeatureLayer Set pFLayer.FeatureClass = pShapefile Dim pLayer As ILayer Set pLayer = pFLayer pLayer.Name = "bhrain3" Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument pMxDoc.AddLayer pFLayer 2012/3/5 18 加载文件夹中栅格数据 步骤:  新建RasterWorkspaceFactory对象。  利用OpenFromFile方法产生一个工作空间。  利用IRasterWorkspace接口的OpenRasterDataset方法打开 要加载的栅格数据,并赋值给新建的栅格图层。  利用IMxDocument的AddLayer把新建图层加载到当前Map 中。  利用ILayer的Name属性对图层的名称进行赋值。 Dim pWFactory As IWorkspaceFactory Set pWFactory = New RasterWorkspaceFactory Dim pWorkspace As IWorkspace Set pWorkspace = pWFactory.OpenFromFile("E:\GIS\DATA\AddData", 0) Dim pRWorkspace As IRasterWorkspace Set pRWorkspace = pWorkspace Dim pRasterfile As IRasterDataset Set pRasterfile = pRWorkspace.OpenRasterDataset("Photo.sid") Dim pRLayer As IRasterLayer Set pRLayer = New RasterLayer pRLayer.CreateFromDataset pRasterfile Dim pLayer As ILayer Set pLayer = pRLayer pLayer.Name = "Photo“ Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument pMxDoc.AddLayer pRLayer 加载文件夹中的TIN数据 步骤:  新建TinWorkspaceFactory对象。  利用OpenFromFile方法产生一个工作空间。  利用ITinWorkspace接口的OpenTin方法打开要加载的TIN 数据,并赋值给新建的TIN图层。  利用IMxDocument的AddLayer把新建图层加载到当前Map 中。  利用ILayer的Name属性对图层的名称进行赋值。 Dim pWFactory As IWorkspaceFactory Set pWFactory = New TinWorkspaceFactory Dim pWorkspace As IWorkspace Set pWorkspace = pWFactory.OpenFromFile("E:\GIS\DATA\AddData", 0) Dim pTWorkspace As ITinWorkspace Set pTWorkspace = pWorkspace Dim pTin As ITin Set pTin = pTWorkspace.OpenTin("dtm_tin") Dim pTLayer As ITinLayer Set pTLayer = New TinLayer Set pTLayer.Dataset = pTin Dim pLayer As ILayer Set pLayer = pTLayer pLayer.Name = "dtm_tin" Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument pMxDoc.AddLayer pTLayer 2012/3/5 19 加载Access数据库中的数据 步骤:  新建AccessWorkspaceFactory对象。  利用OpenFromFile方法产生一个工作空间。  如要打开矢量数据,则利用IFeatureWorkspace接口的 OpenFeatureClass方法;如要打开栅格数据,则利用 IRasterWorkspaceEx接口的OpenRasterDataset方法  利用IMxDocument的AddLayer把新建图层加载到当前Map 中。  利用ILayer的Name属性对图层的名称进行赋值。 Dim pWFactory As IWorkspaceFactory Set pWFactory = New AccessWorkspaceFactory Dim pWorkspace As IWorkspace Set pWorkspace = pWFactory.OpenFromFile("E:\GIS\DATA\myGeodatabas e.mdb", 0) Dim pFWorkspace As IFeatureWorkspace Set pFWorkspace = pWorkspace Dim pShapefile As IFeatureClass Set pShapefile = pFWorkspace.OpenFeatureClass("Parcels") Dim pFLayer As IFeatureLayer Set pFLayer = New FeatureLayer Set pFLayer.FeatureClass = pShapefile Dim pRWorkspace As IRasterWorkspaceEx Set pRWorkspace = pWorkspace Dim pRasterfile As IRasterDataset Set pRasterfile = pRWorkspace.OpenRasterDataset("manhattan1890") Dim pRLayer As IRasterLayer Set pRLayer = New RasterLayer pRLayer.CreateFromDataset pRasterfile Dim pMxDoc
/
本文档为【GIS开发_02_桌面GIS开发1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索