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

GIS开发_04_桌面GIS开发3

2014-01-15 8页 pdf 605KB 22阅读

用户头像

is_034893

暂无简介

举报
GIS开发_04_桌面GIS开发3 2012/5/5 1 桌面GIS开发(三) DESKTOP GIS DEVELOPMENT 3 GIS开发 Email:gis.ecnu@gmail.com 桌面GIS开发 桌面GIS扩展模块开发  作用:扩展现有GIS系统功能  开发方式: 直接使用脚本语言对ArcGIS软件功能进行扩展: ArcObjects+VBA 利用支持COM的开发语言,调用ArcObjects库,开发DLL;在 ArcGIS软件(例如ArcMap)中调用DLL,例如: ArcObjects+Visual Basic.Net...
GIS开发_04_桌面GIS开发3
2012/5/5 1 桌面GIS开发(三) DESKTOP GIS DEVELOPMENT 3 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 组件式GIS开发 组件式软件技术是当前软件技术的潮流之一 组件式GIS的基本思想  把GIS的各大功能模块划分为几个控件,控件如同一堆各 式各样的积木,每个控件完成不同的功能  各个GIS控件之间,以及GIS控件与其它非GIS控件之间, 可以方便地通过可视化的软件开发工具集成起来,形成 最终的GIS应用。如同根据需要把实现各种功能的“积木” 搭建起来,构成GIS应用系统 ArcGIS Engine  ArcGIS Engine(简称AE)是ESRI公司开发的用于组 件式GIS开发的工具包。  非终端用户软件  包括一系列用于开发的GIS控件  ESRI公司对于ArcGIS Engine的定位:ArcGIS Engine is a complete library of embeddable geographic information system (GIS) components for developers to build custom applications,可以方便的将GIS功能嵌入 自己的应用中  ArcGIS Engine基于AO ArcGIS Engine  ArcGIS Engine由开发工具包和运行时环境组成 开发工具包:用于GIS开发的主体,利用基于AO的 组件构建自定义的应用软件,主要包括  基本功能  数据存取  地图表达  开发组件 运行时环境(ArcGIS Engine Runtime):已开发的 GIS程序在其它机器上安装运行时,必须有Engine的 运行时环境。  AO库 ArcGIS Engine的特点 的GIS框架  基于ArcObjects,与ESRI系列软件拥有相同的开发基础  在原有强大的GIS功能基础上进行功能扩展 成本适宜的配置  开发者:一套开发工具  使用者:多个Runtime授权 支持跨平台、跨开发语言开发  Windows、Linux、Unix  .Net、C++、Java 2012/5/5 2 ArcGIS Engine的安装 根据不同的开发平台安装不同的ArcGIS Engine Developer Kit 若使用.NET开发,需要先安装Microsoft Visual Studio 2008,再安装ArcGIS Engine SDK for the Microsoft .NET Framework ArcGIS Engine的安装 ArcGIS Engine的安装 软件授权(ESRI公司的授权文件后缀名为ecp) ArcGIS Engine控件  ArcGIS Engine控件是嵌入式控件,可以添加到编译 环境的窗口和对话框中,并且开发者可以方便地设置 控件的属性。 主要控件包括:  MapControl  PageLayoutControl  TOCControl  ToolbarControl  SceneControl  GlobeControl  LicenseControl  SymbologyControl  …… ArcGIS Engine控件  MapControl控件用于地图数据的可视化显示,提供类 似于ArcMap中的Data View地图显示窗口  主要功能有: 显示地图 放大、缩小、漫游 生成图形元素 显示Lable 识别地图上被选中 的元素 空间、属性查询 ArcGIS Engine控件  PageLayoutControl控件  用于地图数据的可视化显示,提供类似于ArcMap中的 Layout View地图显示窗口  主要功能: 添加设置地图 要素(图例、比 例尺、指北针等) 地图的打印与输出 2012/5/5 3 ArcGIS Engine控件  TOCControl控件  提供类似于ArcMap中的Table of Contents的功能,需要和 一个MapControl配合工作  主要功能有: 图层管理 符号显示与设置 ArcGIS Engine控件  ToolbarControl控件  提供类似于ArcMap中的工具条、命令、菜单、状态栏等 功能,需要和一个MapControl配合工作  主要功能有: 菜单设置 工具条设置 工具条中命令的 设置 ArcGIS Engine控件  SceneControl控件和GlobeControl控件  使用SceneControl控件和GlobeControl控件必须具有 ArcGIS Engine的3D分析选项授权  SceneControl控件和GlobeContro控件分别与ArcScene和 ArcGlobe相对应  主要功能:三维场景的显示 ArcGIS Engine控件  LicenseControl控件  用于初始化应用程序的License,使得相应应用程序在其 它机器上可以正常使用  SymbologyControl控件  提供类似于ArcMap中 地图符号选择的对话框 使用AE开发第一个独立的GIS系统 第一步:新建工程  VS 2008 >File>New>Project>Visual Basic>ArcGIS>Engine>Windows Application  输入工程名称,选择保存位置 第二步:添加引用(Add Reference) 使用AE开发第一个独立的GIS系统 第三步:License Checking 2012/5/5 4 使用AE开发第一个独立的GIS系统 第四步:在Form1.vb中添加AE控件并设置属性  LicenseInitializer.vb包含License初始化所需要的代码  ApplicationEvents.vb包含系统启动、退出等事件  Form1.vb是一个Windows窗体,也是当前系统的默认启动 窗体,在Form1.vb中可以添加所需要的AE控件 使用AE开发第一个独立的GIS系统 第四步(续)  添加MapControl控件 并设置属性,其中 Map Document用于 设置默认打开的mxd 文档  MapControl的名称( Name)为 AxMapControl1 使用AE开发第一个独立的GIS系统 第四步(续)  添加两个ToolbarControl控 件并设置属性,一个 ToolbarControl控件作为菜 单,另一个作为工具条。  属性设置General标签下 Buddy属性需要选择已添 加的MapControl: AxMapControl1;Items标 签下可以利用Add增加菜 单和命令。 使用AE开发第一个独立的GIS系统 第四步(续)  添加TOCControl控件 并设置属性,其中 General标签下Buddy 属性需要选择已添加 的MapControl: AxMapControl1 第五步:编译运行程 序 添加自定义命令 示例:自定义命令实现点击放大 在Solution Explorer中右击工程名称,选择Add>New Item>ArcGIS>Base Command  注意:需选择MapControl or PageLayoutControl Command  其余设置与在.Net环境中开发 ArcMap扩展模块中的自定义 命令类似 添加自定义命令 更改图标、编写代码重写构造函数、编写代码实现功 能  更改图标、重写构造函数的方法与在.Net环境中开发 ArcMap扩展模块相似  编写代码可以利用ArcGIS Snippets功能,插入函数: ArcGIS Engine > Mapping > Zoom by Ratio;在OnClick() 中添加调用代码: 2012/5/5 5 代码对比 ‘VBA放大及获取FocusMap 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 ‘Engine+VB.Net放大 Dim pActiveView As IActiveView = Form1.AxMapControl1.ActiveView ZoomByRatio(pActiveView, 0.5) ‘Engine+VB.Net获取FocusMap Dim pActiveView As IActiveView = Form1.AxMapControl1.ActiveView Dim pMap As IMap = pActiveView.FocusMap 添加自定义命令 在Form1的Form1_Load的事件中添加代码,把自定义 的命令添加到工具条中 Dim btnZoomIn As ZoomIn = New ZoomIn() AxToolbarControl2.AddItem(btnZoomIn) 添加自定义命令 AxToolbarControl2.AddItem(btnZoomIn, -1, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly) 使用MapControl Application 新建工程  VS 2008 > File > New > Project > Visual Basic > ArcGIS > Engine > MapControl Application  输入工程名称,选择保存位置 工程组成  MainForm.vb——包含 MapControl和TOCControl的 主窗口  Earth.ico——系统图标  CreateNewDocument.vb—— 新建地图文档的命令 使用MapControl Application模板  MainForm MapControlTOCControl ToolbarControl MenuStrip(Windows控件) StatusStrip(Windows控件) 使用MapControl Application模板  MainForm代码解读  MainForm_Load  axMapControl1_OnMapReplaced  axMapControl1_OnMouseMove  #Region "Main Menu event handlers“ 2012/5/5 6 示例:改变点符号颜色 在MenuStrip控件上添加自定义菜单项,点击后将点 符号的颜色改变为红色 步骤:  在MenuStrip上添加新菜单,设置新菜单项。  新建一个颜色对象,通过R、G、B赋值定义对象的颜色。  新建一个符号对象(和原有符号对象的样式相一致,如 SimpleMarkerSymbol),把新建的颜色赋给符号对象的 Color属性。  新建一个Renderer对象(如SimpleRenderer),把新建的 符号赋给Renderer对象的符号属性。  获得需要改变颜色的图层(FeatureLayer),把新建的 SimpleRenderer赋给图层的Renderer属性。  刷新MapControl和TOCControl对象。 Dim pColor As IRgbColor = New RgbColor pColor.Red = 255 pColor.Green = 0 pColor.Blue = 0 Dim pMarkerSym As ISimpleMarkerSymbol = New SimpleMarkerSymbol pMarkerSym.Color = pColor Dim pRenderer As ISimpleRenderer = New SimpleRenderer pRenderer.Symbol = CType(pMarkerSym, ISymbol) Dim pActiveView As IActiveView = axMapControl1.ActiveView Dim pMap As IMap = pActiveView.FocusMap Dim pGFLayer As IGeoFeatureLayer pGFLayer = CType(pMap.Layer(0), IGeoFeatureLayer) pGFLayer.Renderer = CType(pRenderer, IFeatureRenderer) axMapControl1.Refresh() axTOCControl1.Update() 示例:右击TOC图层选择并更改符号  SymbologyControl控件  LoadStyleFile方法:用于加载样式库(后缀为.ServerStyle 文件)。例如: AxSymbologyControl1.LoadStyleFile(ArcGISInstallPath + "\Styles\ESRI.ServerStyle")  OnItemSelected事件:在当前被选中的符号发生改变时触 发此事件。  StyleClass属性:用于设置加载符号的类别,其值在 esriSymbologyStyleClass枚举类中定义。  SymbologyControl中每个符号,均对应一个 IStyleGalleryItem 示例:右击TOC图层选择并更改符号  TOCControl控件  HitTest方法:返回TOC中某个特定位置(x,y)的组成 元素。 X,Y为坐标;ItemType为esriTOCControlItem枚举类,表示 该组成元素的类型 (none, map, layer, heading或者legend class);BasicMap为Imap;Layer为Ilayer;Unk为 ILegendGroup;Data为Variant类型,表示图层序号. 示例:右击TOC图层选择并更改符号  IStyleGalleryItem接口  Name属性:该符号显示在SymbologyControl中的名称  Item属性:该符号对应的Symbol对象 2012/5/5 7 示例:右击TOC图层选择并更改符号 具体步骤  新建frmSymbol窗体,并设置对应的控件( SymbologyControl、Button等)。  在TOCControl的OnMouseDown事件中,编写代码,获取 鼠标右击时的图层类型和符号。  在frmSymbol新建(New)或者载入(load事件)时,根 据TOCControl获取的图层类型和符号,在 SymbologyControl中根据载入对应的符号库。  根据SymbologyControl中选择的符号,设置当前图层的符 号。  刷新视图和图例。 程序代码参考帮助中的示例:Change layer rendering using the SymbologyControl 示例:设置鹰眼图 程序中需添加两个MapControl,其中一个用作地图显 示(Name:MapDisp),另一个用作鹰眼图(Name :MapWatch) 在MapDisp中加载用于地图显示的mxd,在MapWatch 中加载用作鹰眼图的mxd  一般而言,用于鹰眼图的mxd应相对比较简单 加载mxd代码: AxMapControl1.LoadMxFile(路径) 设置鹰眼图 在MapDisp的OnExtentUpdated事件中添加代码,用于 在MapDisp显示地图的范围改变时,在MapWatch中 绘制出对应区域 Dim pEnvelope As IEnvelope = CType(e.newEnvelope, IEnvelope) Dim pGra As IGraphicsContainer = MapWatch.Map Dim pActiveView As IActiveView = pGra pGra.DeleteAllElements() Dim pRectangleEle As IRectangleElement = New RectangleElementClass() Dim pElement As IElement = pRectangleEle pElement.Geometry = pEnvelope Dim pLineColor As IRgbColor = New RgbColorClass() pLineColor.Red = 255 pLineColor.Green = 0 pLineColor.Blue = 0 Dim pOutline As ILineSymbol = New SimpleLineSymbolClass() pOutline.Color = pLineColor pOutline.Width = 2 Dim pFillColor As IRgbColor = New RgbColorClass() pFillColor.Transparency = 0 Dim pFillSymbol As IFillSymbol = New SimpleFillSymbolClass() pFillSymbol.Color = pFillColor pFillSymbol.Outline = pOutline Dim pFillShapeEle As IFillShapeElement = pElement pFillShapeEle.Symbol = pFillSymbol pGra.AddElement(pFillShapeEle, 0) pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, Nothing, Nothing) 设置鹰眼图 设置MapWatch属性,将AutoMouseWheel设置为False 在MapWatch的MouseDown事件中添加代码,实现在 MapWatch上点击和拉框的操作可以改变MapDisp的 视图范围 Dim pEnvelope As IEnvelope Dim pFeedEnvelope As IEnvelope = MapWatch.TrackRectangle() Dim eWidth As Double = 0 Dim eHeight As Double = 0 Dim pGraphicsContainer As IGraphicsContainer = MapDisp.Map If Not pFeedEnvelope Is Nothing Then pGraphicsContainer.DeleteAllElements() If Not pFeedEnvelope.IsEmpty Then eWidth = pFeedEnvelope.Width eHeight = pFeedEnvelope.Height End If If eWidth = 0 Or eHeight = 0 Then Dim As IPoint = New PointClass() pPt.PutCoords(e.mapX, e.mapY) MapDisp.CenterAt(pPt) Else pEnvelope = pFeedEnvelope MapDisp.Extent = pEnvelope End If End If 2012/5/5 8 示例:IDW插值 综合使用所讲的编程知识,进行自定义窗体的设计, 实现IDW插值。 要点:  License项目的修改  自定义窗体的设计  参数传递  获取相关的图层及字段  加载新图层
/
本文档为【GIS开发_04_桌面GIS开发3】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索