实验3 ArcGIS Engine 开发
- 格式:doc
- 大小:203.50 KB
- 文档页数:5
第一章Arc Engine 介绍第二章Arc Engine结构一、Arc Engine包含的主要库文件1、System库ArcGIS结构中最底层的库,包含为其它库提供服务的组件。
2、SystemUI包含为用户界面组件(在ArcEngine中可以进行扩展)定义的接口,包括:ICommand, ITool, 和ItoolControl接口。
3、Geometry处理存储在要素类或其它图形元素中的几何图形要素。
我们经常遇到的基本几何目标有Point, MultiPoint, Polyline 和Polygon4、Display包含显示地理数据的像,如:symbols,colors 等。
我们通常通过类似Map或PageLayout 对像提供的视图(view)来访问Display5、Server包含用来连接到ArcGIS Servers的对像。
我们可以通过GISServerConnection对象访问ArcGIS Server。
6、Output用来将图形输出到设备上,如printers、plotters和hardcopy formats(如:EMF,JPG,BMP等)。
可扩展7、GeoDatabase为geodatabase提供API函数。
可以扩展以支持特定数据格式(Features, Classes, etcetera),可通过PlugInDataSource对象加入自定义的矢量数据源。
Geodatabase支持的本地数据类型无法扩展8、GISClient用来接受ArcIMS和ArcGIS Server.提供的网络服务。
9、DataSourcesFile包含以文件为数据源的(shapefile,coverage, TIN, CAD, SDC, StreetMap, and VPF)部分GeoDatabase API函数的实现。
10、DataSourcesGDB包含以数据库为数据源(Microsoft Access、ArcSDE—IBM DB2, Informix, Microsoft SQL Server, and Oracle)部分GeoDatabase API函数的实现。
ArcEngine实验内容实验一:熟悉ArcEngine中的TocControl、ToolbarControl、MapControl基本控件,创建简单的ArcEngine开发框架,能进行放大、缩小、平移、全图,并具有鹰眼功能;实验二:自定义简单功能的Commands、Tools,并使用ToolbarControl加载到工具栏上;实验三:使用ISegmentCollection、IPointCollection、IGeometryCollection接口,在地图上构建IPoint、Line、Polyline、Polygon、IEnvelope、IMultipoint、Path 对象,可以直接添加到一个图层中,也可以在地图上以Element元素的方式添加到地图上。
实验四:在TocControl控件中添加快捷菜单,当在某一图层上右击弹出快捷菜单,快捷菜单中实现对点、线、面图层分别进行符号化。
系统必须自动能判断当前图层是那种类型的图层(如点、线、面),实现对这些图层的简单符号化和高级符号化的功能。
1.调用ArrowMarkerRender对象、CharacterMarkerSymbol对象、PictureMarkerSymbol对象、MultiLayerMarkerSymbol对象实现点状符号化。
2.调用、CartographicLineSymbol对象、PictureLineSymbol对象实现线状符号化。
3.调用LineFillSymbol对象、MarkerFillSymbol对象、GradientFillSymbol对象实现面状符号化。
4.使用IFormattedTextSymbol对象、MarkerTextBackground对象、BallonCallout对象、LineCallout对象实现向MapContrl控件中添加符号化处理的文字。
5.对每个图层能进行SimpleRenderer(简单渲染)、ClassBreaksRenderer(分级渲染)、UniqueValueRenderer(按值渲染)、BiUniqueValueRenderer (双变量渲染)、ProportionalSymbolRenderer (梯度渲染)、ChartRenderer (图表渲染)、DotDensityRenderer (点密度渲染)、ScaleDependentRenderer (按比例尺渲染)图层的符号化和渲染的参数尽可能使用一个对话框,在对话框中实现对图层颜色、样式、文字字体的设置,按确定Button后实现选定图层的要素的符号化和渲染。
ArcEngine 开发1.基础篇1.1.开发环境1.1.1.如何在ArcMap的VBA环境中编程ArcMap是ArcGIS家族的成员之一,它内置了一种集成编程环境―VBA (Visaul Basic for Apllications)。
通过VBA编程,用户不但可以扩展ArcMap 的菜单、工具条等,而且可以完成大多数用户的特定需求。
ArcMap中VBA编程的方法有两种,一种是写VBA宏,另一种是创建UIControl 并在其事件中写入实现用户需求的代码。
下面列出两种方法的一般步骤。
方法一:写VBA宏(直接在VBA编辑器中编辑函数和过程)1、如图1,单击菜单栏中的<Tools>命令,选择<Macros>的<Visual Basic Editor>项, 直接启动ArcMap的VBA编辑器;或者选择<Macros>的<Macros>项,进入如图2所示Macro对话框,在“Macro Name”文本框中输入要创建的宏的名称,并点<Create>按钮,启动VBA编辑器。
图1 启动Macro对话框/启动VBA编辑器图2 Macro对话框2、在图3所示的窗口中,用户可以根据实际选择在Normal节点或者Project 节点的ThisDocument、Forms、Modules中编写宏(函数或过程),Normal节点下所写的宏系统自动保存,除非用户删除,否则它将始终存在并在任何工程中都有效;而在Project节点下所写得宏随工程保存(如不保存工程,则宏也将不被保存),并只在工程中有效。
图3 VBA编辑器(VBE)3、运行VBA宏在VBA编辑器中写好VBA代码后,有两种方式运行:第一,点击VBA编辑器工具条中的(运行)按钮,可立即运行写好的代码;第二,退出VBA编辑器,重新启动Macro对话框,如图2,选择要运行的VBA宏名称,点击<Run>按钮即可运行相应的VBA宏。
arcgisengine二次开发实例
ArcGIS Engine是ArcGIS系列软件产品之一,用于在分布式系统环境下构建ArcGIS 技术,实现GIS应用软件开发。
开发人员可以利用ArcGIS Engine来构建自定义GIS应用程序、地理空间分析应用程序以及分布式GIS解决方案。
ArcGIS Engine提供了一个强大的开发平台,它的几乎所有的开发框架以及资源都位于一个方便的框架中,开发人员可以使用其中的几中可视化控件进行ArcGIS地图和数据应用开发。
ArcGIS Engine是一款基于COM(Component Object Model)技术的GIS应用平台,它通过COM在用户定义的交互界面之间提供了独立的组件。
组件定义了一种行为和数据的概念,组件间的交互可以非常简单的实现。
ArcGIS Engine可以作为地图数据的可视化引擎,允许开发者使用统一的图形化界面控制地图的显示和操作。
此外它还可提供复杂的数据空间分析模块,在开发人员输入实际的空间数据后,可进行数据空间分析,产生对空间结果分析的可视化输出。
ArcGIS Engine可以让开发者灵活地构建系统架构,以满足自定义的GIS应用开发需求。
开发人员可以使用ArcGIS Engine的组件,使其在分布式的应用程序框架中更好的发挥作用。
比如可以使用专业矢量处理组件,在GIS信息系统中构建面板,并在面板上放入各种可视化控件,满足对空间数据的管理和空间数据分析需求。
《A r c G I S E n g in e+C#实例开发教程》目录第一讲桌面GIS应用程序框架的建立 (2)第二讲菜单的添加及其实现 (5)第三讲MapControl与PageLayoutControl同步 (9)第四讲状态栏信息的添加与实现 (24)第五讲鹰眼的实现 (27)第六讲右键菜单添加与实现 (32)教程Bug及优化方案1 (40)第七讲图层符号选择器的实现1 (40)第七讲图层符号选择器的实现2 (57)版权声明:《ArcGISEngine+C#实例开发教程》为3SDN()原创教程,版权所有。
禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。
教程采用C#语言,以VS2005为开发工具。
读者对象:ArcGISEngine(以下简称AE)开发初学者,了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。
预期学习效果:进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“”重命名为“”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。
选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。
选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。
目录实验目的 (2)实验内容 (2)实验步骤 (2)结论 (11)基于.NET的ArcGIS Engine 的开发实验目的.NET框架引入一个改进的安全模式,.NET框架不会自动使用当前版本公共语言运行库来运行使用以前版本的.NET框架构建应用程序,因此,在.NET4框架下运行以前的运用程序,使用Visual Studio的项目的属性中制定的目标.NET框架来重新编译你的应用程序,或者在应用程序的配置文件中使用元素来指定支持的运行时刻库。
实验内容将应用程序用到的ArcGIS控件和其他的ArcGIS Engine库引用装载到开发环境之中。
实验步骤1、Visual ,从“新建项目”对话框中创建一个新的Visual C# “windows窗体应用程序”项目,如图1所示。
图12、将项目命名为“Sample”,并选择“位置”保存该项目。
3、单击“视图”菜单,选择“工具箱”子菜单项。
4、4、在“工具箱”空白处右键,在弹出的快捷菜单中选择“添加选项卡”,然后在新增选项卡上输入“ESRI”作为选项卡标签,如图2。
图25、在弹出的对话框中选择“NET Framework组件”选项卡,选中“AxMapControl”、“AxPageLayoutControl”、“AxToCControl”和“AxToolbarControl”等复选框,单击“确定”,将所选的控件添加到工具栏上,如图3。
图36、在“项目”菜单上选择“添加引用”项添加引用,如图4所示,添加如下项目。
图47、打开.NET窗体,双击“工具箱”中“ESRI”标签栏中的AxMapControl控件,将MapControl加入到窗体上,再将AxToolbarControl也添加到窗体上,如图5。
图58、在窗体上双击显示窗体代码窗口,加载图层到MapControl中,在FormLoad事件中添加地图文档加载代码,代码如下图6中所示。
图69、设置ToolbarControl与MapControl控件关联。
ArcGIS Engine控件编程详解一、主要内容1、在 VB 中使用 ArcGIS Engine 的四个常用控件 MapControl、PageLayoutControl、TOCControl和 ToolBarControl;2、向地图控件中装载地图文档、增加不同类型的图层;3、伙伴控件的设置;4、ToolBarControl的设置;5、VB 窗体大小变化的控制事件 Form_Resize 的设置。
二、学时安排:2 学时三、预习内容回顾 ArcGIS Engine 的四个常用控件 MapControl、PageLayoutControl、TOCControl 和 ToolBarControl 所实现的接口及所包含的属性和方法,了解一些相关的常量。
四、ArcGIS Engine 控件编程1、实验准备1)在 D 盘上建立一文件,命名为 EnginePractice;2)启动 VB,新建一工程,命名为 EngineControl,并将其保存到 EnginePractice中;3)在 Form1 窗体中分别引入 MapControl、PageLayoutControl、TOCControl、两个 ToolBarControl、一个 TabStrip 控件及一个 CommonDialog 控件。
ØTabStrip 控件的引入如下图:Ø CommonDialog控件的引入如下图:4)将控件布局到窗体 Form1 上,并添加菜单,如下图:5)菜单的添加—选择[Tools]菜单项选择[Menu Editor… Ctrl+E]如下图:Ø编辑[File]菜单各子菜单分别命名为:LoadMenu、SaveMenu、SaveAsMenu 、AddNewLayerMenu 、AddShapeMenu 、AddLayerMenuØ编辑[Edit]菜单各子菜单分别命名为:LabelEditMenu 、AutomaticMenu、ManualMenuØ编辑[Tool]菜单各子菜单分别命名为:SelectFeaturemenu 、ClearSelectMen2、ArcGIS Engine 许可初始化1)按照实验三的方式引入类库:ESRI System Object Library、ESRI SystemUI Object Library 等,如下图:2)定义初始化对象Option ExplicitPrivate m_pAoInitialize As IAoInitialize3)在 Form_Load 事件中添加许可初始化代码:Set m_pAoInitialize = New AoInitializeIf m_pAoInitialize Is Nothing ThenMsgBox "Unable to initialize. This application cannot run!"Unload LabelEditExit SubEnd If'Determine if the product is availableIf m_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeEngine) = esriLicenseAvailable ThenIf m_pAoInitialize.Initialize(esriLicenseProductCodeEngine) <> esriLicenseCheckedOut ThenMsgBox "The initialization failed. This application cannot run!"Unload LabelEditExit SubEnd IfElseMsgBox "The ArcGIS Engine product is unavailable. This application cannot run!"Unload LabelEditExit SubEnd If3、ToolBarControl 设置1)ToolBarControl1的设置使用属性对话框进行设置,单击[Add…]命令按钮进行添加,找到作用于 MapControl 控件的对象,Item 选项为:1-esri3D,如图:2)ToolBarControl2的设置使用属性对话框进行设置,单击[Add…]命令按钮进行添加,找到作用于 PageLayoutControl控件的对象,Item选项为:1-esri3D,如图:3)将 ToolBarControl1 和将 ToolBarControl2叠置在一起4、TabStrip 容器控件的设置在 Form_Load 事件中添加如下代码:TabStrip1.Tabs(1).Caption = "MapControl"TabStrip1.Tabs.Add 2, , "PageLayoutControl"Set TabStrip1.SelectedItem = TabStrip1.Tabs(1)5、TabStrip1_Click 事件设置用鼠标双击 TabStrip1 控件,将会显示 TabStrip1_Click 事件,在该事件中添加如下代 码(本段代码主要用于伙伴控件的设置):Private Sub TabStrip1_Click()'Toggle control visiblity and set the buddyIf TabStrip1.SelectedItem.index = 1 ThenPageLayoutControl1.Visible = FalseMapControl1.Visible = TrueToolbarControl1.Visible = TrueToolbarControl2.Visible = FalseTOCControl1.SetBuddyControl MapControl1ToolbarControl1.SetBuddyControl MapControl1ElsePageLayoutControl1.Visible = TrueMapControl1.Visible = FalseToolbarControl1.Visible = FalseToolbarControl2.Visible = TrueTOCControl1.SetBuddyControl PageLayoutControl1ToolbarControl2.SetBuddyControl PageLayoutControl1End IfEnd Sub6、MapControl1_OnMapReplaced 事件的设置此段代码是用于控制当 MapControl1 的内容改变时 PageLayoutControl1 的内容也随之 改变。
【最新整理,下载后即可编辑】第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGIS Windows Forms”节,将“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,制版)。
ArcEngine多线程开发 ⼀、前⾔ GIS应⽤开发中,会遇到计算量⼤耗时长的操作,如果使⽤单线程开发则UI界⾯会卡死,这种情况是令⼈抓狂的。
为了实现执⾏某操作时UI界⾯保持响应,我们可以使⽤多线程开发。
阅读这篇⽂章之前需要先了解同步和异步、多线程、STA和MTA、委托(也有资料翻译为“代理”)等相关内容。
⼆、AE多线程开发的主要障碍 AO对象是STA对象,⽆法在线程间相互传递/共享(什么是STA对象可⾃⾏百度,中举的例⼦很好)。
同时,AE开发时线程会被标记为STA线程,STA线程之间相互传递的对象必须是简单类型或托管类型。
针对此问题,我们可以将AO对象序列化为字符串,将序列化得到的字符串在STA进程间相互传递,在使⽤时将序列化字符串反序列化为AO对象(AO对象序列化和反序列化可以查看),然后执⾏相关操作。
三、多线程开发⽰例 以坡度计算为例,主要使⽤的接⼝和类包括:图层数据相关(IRasterLayer、IGeoDataset、IName、IRasterDataset);分析操作相关(ISurfaceOp);线程类(Thread) 思路: 1、声明⼀个委托⽤于回调操作结果,编写业务操作函数和操作结果回调函数 2、实例化⼯作线程,并将⼯作线程的ApartmentState设置为STA 3、从MapControl中获取指定名称的栅格图层,将栅格图层数据源Name对象序列化为字符串传递给⼯作线程执⾏分析 4、回调显⽰操作结果 1.声明委托 //回调委托 private delegate void SlopeResultCallback(string item); 2.编写业务操作函数和操作结果回调函数///<summary>///业务函数,⽤于执⾏相关操作///</summary>private void Slope(object SerStrOfArcObj){//反序列化为Name对象IName pName = DeSerialzed(SerStrOfArcObj as string) as IName;//获取数据源GeodatasetIGeoDataset pGeoDs = pName.Open() as IGeoDataset;//实例化RasterSurfaceOp类//可使⽤IRasterAnalysisEnvironment接⼝设置分析环境//此处只为了演⽰多线程开发⽅式,未设置分析环境,读者可根据实际需求⾃⾏设置分析环境ISurfaceOp pSurfaceOp = new RasterSurfaceOpClass();//坡度分析得到分析结果,可使⽤ISaveAs2接⼝报错分析结果到指定⽬录IGeoDataset pSlopeRes = pSurfaceOp.Slope(pGeoDs, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees);//获取栅格数据集,创建栅格图层IRasterDataset pRstDs = (pSlopeRes as IRasterBandCollection).Item(0).RasterDataset;IRasterLayer pRstLyr = new RasterLayerClass();pRstLyr.CreateFromDataset(pRstDs);//将pRstLyr序列化为字符串传递给回调函数,将结果更新的UI界⾯中(MapControl)显⽰string pRstLyrToStr = Serialzed(pRstLyr);AddSlopeResultToMap(pRstLyrToStr);}///<summary>///回调函数,更新UI///</summary>///<param name="item"></param>private void AddSlopeResultToMap(string item){if (this.axMapControl1.InvokeRequired){SlopeResultCallback d = new SlopeResultCallback(AddSlopeResultToMap);this.Invoke(d, new object[] { item }); //切换到UI线程执⾏委托,this.Invoke()的⽤法可⾃⾏查阅相关资料 }else{//反序列化IRasterLayer plyr = DeSerialzed(item) as IRasterLayer;this.axMapControl1.AddLayer(plyr as ILayer);}} 3.实例化⼯作线程并设置为STA,在⼯作线程⾥运⾏业务操作函数///<summary>///执⾏坡度分析///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnSlope_Click(object sender, EventArgs e){//获取栅格图层,然后获取数据源Name对象IRasterLayer pRstLyr = GetLayerByName(axMapControl1, "宋庆国.jpg") as IRasterLayer;if (pRstLyr == null)return;IName pName = (pRstLyr as IDataLayer).DataSourceName;//将Name对象序列化为字符串string pNameToStr = Serialzed(pName);//实例化⼯作线程,并将⼯作线程设置为STA模式Thread t = new Thread(new ParameterizedThreadStart(Slope));t.SetApartmentState(ApartmentState.STA);//把序列化得到的字符串传递给⼯作线程t.Start(pNameToStr);} 4.完整代码using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.DataSourcesFile;using ESRI.ArcGIS.DataSourcesRaster;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.GeoAnalyst;using ESRI.ArcGIS.Geodatabase;using Microsoft.Win32;using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class Form1 : Form{//回调委托private delegate void SlopeResultCallback(string item);public Form1(){InitializeComponent();}///<summary>///回调函数,更新UI///</summary>///<param name="item"></param>private void AddSlopeResultToMap(string item){if (this.axMapControl1.InvokeRequired){SlopeResultCallback d = new SlopeResultCallback(AddSlopeResultToMap);this.Invoke(d, new object[] { item }); //切换到UI线程执⾏委托,this.Invoke()的⽤法可⾃⾏查阅相关资料{//反序列化IRasterLayer plyr = DeSerialzed(item) as IRasterLayer;this.axMapControl1.AddLayer(plyr as ILayer);}}///<summary>///业务函数,⽤于执⾏相关操作///</summary>private void Slope(object SerStrOfArcObj){//反序列化为Name对象IName pName = DeSerialzed(SerStrOfArcObj as string) as IName;//获取数据源GeodatasetIGeoDataset pGeoDs = pName.Open() as IGeoDataset;//实例化RasterSurfaceOp类//可使⽤IRasterAnalysisEnvironment接⼝设置分析环境//此处只为了演⽰多线程开发⽅式,未设置分析环境,读者可根据实际需求⾃⾏设置分析环境ISurfaceOp pSurfaceOp = new RasterSurfaceOpClass();//坡度分析得到分析结果,可使⽤ISaveAs2接⼝报错分析结果到指定⽬录IGeoDataset pSlopeRes = pSurfaceOp.Slope(pGeoDs, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees);//获取栅格数据集,创建栅格图层IRasterDataset pRstDs = (pSlopeRes as IRasterBandCollection).Item(0).RasterDataset;IRasterLayer pRstLyr = new RasterLayerClass();pRstLyr.CreateFromDataset(pRstDs);//将pRstLyr序列化为字符串传递给回调函数,将结果更新的UI界⾯中(MapControl)显⽰string pRstLyrToStr = Serialzed(pRstLyr);AddSlopeResultToMap(pRstLyrToStr);}///<summary>///执⾏坡度分析///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnSlope_Click(object sender, EventArgs e){//获取栅格图层,然后获取数据源Name对象。
《ArcGISEngine+C#实例开发教程》目录第一讲桌面GIS应用程序框架的建立 (2)第二讲菜单的添加及其实现 (5)第三讲MapControl与PageLayoutControl同步 (9)第四讲状态栏信息的添加与实现 (24)第五讲鹰眼的实现 (27)第六讲右键菜单添加与实现 (32)教程Bug及优化方案1 (40)第七讲图层符号选择器的实现1 (40)第七讲图层符号选择器的实现2 (57)版权声明:《ArcGISEngine+C#实例开发教程》为3SDN()原创教程,版权所有。
禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。
教程采用C#语言,以VS2005为开发工具。
读者对象:ArcGISEngine(以下简称AE)开发初学者,了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。
预期学习效果:进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。
选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。
.ArcGIS Engine二次开发——提高篇1缩略图(鹰眼)鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。
在本小节中我们将学习如何制作这种鹰眼。
1.1添加控件新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。
布局如下图所示。
左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。
图 1 界面布局在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。
图2添加按钮1.2代码添加及解释鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。
当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。
下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三个引用。
首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:private void axMapControl1_OnExtentUpdated(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e){//创建鹰眼中线框IEnvelope pEnv = (IEnvelope)e.newEnvelope;IRectangleElement pRectangleEle = new RectangleElementClass();IElement pEle = pRectangleEle as IElement;pEle.Geometry = pEnv;//设置线框的边线对象,包括颜色和线宽IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255;// 产生一个线符号对象ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 2;pOutline.Color = pColor;// 设置颜色属性pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 0;// 设置线框填充符号的属性IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;// 得到鹰眼视图中的图形元素容器IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;IActiveView pAv = pGra as IActiveView;// 在绘制前,清除axMapControl2 中的任何图形元素pGra.DeleteAllElements();// 鹰眼视图中添加线框pGra.AddElement((IElement)pFillShapeEle, 0);// 刷新鹰眼pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}当鼠标点击鹰眼窗体时,主窗体Extent随之改变。
ArcGIS Engine二次开发——基础篇1ArcGIS Engine二次开发——基础篇1.1第一个简单的ArcGIS Engine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。
如果您之前没有接触过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。
1.1.1创建一个新的工程首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。
图1新建项目对话框选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text属性为“地图浏览”,图2窗体命名1.1.2添加控件及引用点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。
用同样的方法,再将LicenseControl添加到Form1中。
图3 打开工具箱图4工具箱如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。
首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。
如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI. MapControl”前面打勾)。
《地理信息系统软件工程与应用开发》作业开发文档学院:测绘学院姓名:学号:教师:目录一、需求分析 (3)二、总体设计 (3)三、界面设计 (3)四、数据设计 (5)五、程序实现 (5)1、创建一个新的工程 (5)2、添加控件 (5)3、控件绑定 (5)4、添加工具 (6)5、添加菜单 (6)6、PageLayout与MapControl联动 (7)7、鹰眼的实现 (7)8、状态栏信息的添加与实现 (8)9、右键菜单添加与实现 (9)10、图层符号选择器的实现 (12)11、属性数据表的查看显示 (13)12.地图查询 (14)六、总结 (16)一、需求分析通过这次实习能够让学生深入的理解地理信息系统的开发的理论,熟练掌握如何使用Arc Engine进行二次开发,包括桌面GIS应用程序框架的搭建、菜单的添加与实现、Map control 与Page Layout Control的同步、状态栏以及鹰眼的实现,能够实现适应于专题地图的功能的地图查询功能的构造。
通过亲身实践,对Arc Engine的底层开发有个更为彻底的认识与理解。
二、总体设计本次开发的系统将为用户提供准确、高效、易于操作的工作界面,用户能够轻松的便捷的加载原始地图及数据,流畅的在原地图的基础上进行基本操作及查询、分析。
实习基本能如下:1、桌面GIS 应用程序框架的建立2、菜单的添加及其实现3、MapControl 与PageLayoutControl 同步4、状态栏信息的添加与实现5、鹰眼的实现6、右键菜单添加与实现7、图层符号选择器的实现8、属性数据表的查看9、地图查询(图查属性以及属性查图)三、界面设计本次开发的基本界面设置如图所示:其中文件中包括(新建、打开、添加数据、保存、另存为、退出)、地图查询中包括图查属性和属性查图两个功能,设计视图分别如下所示:四、数据设计本次的开发的数据并局限与专门的数据,这里采用的数据是所给的十三个实习材料中的第一个实习的数据也即是Exec1中的数据。