ArcGIS_Engine开发入门教程 c#.doc
《ArcGIS_Engine开发入门教程 c#.doc》由会员分享,可在线阅读,更多相关《ArcGIS_Engine开发入门教程 c#.doc(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、窗体顶端C#,ArcGIS Engine开发入门教程利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用Lcwld 整理此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤。你可以在下面的目录下找到相应的样例程序:DeveloperKitSamplesDeveloper_Guide_Scenarios ArcGIS_EngineBuilding_an_ArcGIS_Control_ApplicationMap_Viewer注:ArcGIS样例程序不包含在ArcGIS Engine开发工具包“典型”安装方式中。如
2、果你没有安装它们,则可以重新运行开发工具包安装向导,选择“定制”或“修改”方式,并选择软件开发包下的样例项进行安装。一、项目描述利用视窗控件建立应用程序的目标是演示并使你熟悉在微软Visual Studio .NET API中使用标准ArcGIS控件开发和部署GIS应用所需的步聚。本节中使用了Visual Studio .NET开发环境中的MapControl、 PageLayoutControl、TOCControl和ToolbarControl等视窗控件。COM、Java和C+程序员应该参考如下章节:利用ActiveX建立应用程序、利用可视化JavaBeans建立应用程序、建立命令行方式的
3、Java应用和建立命令行方式的C+应用。本节演示了创建查看ArcMap和ArcGIS桌面应用图形文档的GIS应用程序的步骤。此节包含了以下技术:l 在微软Visual Studio .NET中加载和嵌入ArcGIS控件。l 向PageLayoutControl和MapControl中加载图形文档。l 设置ToolbarControl和TOCControl的绑定控件。l 处理窗口缩放。l 向ToolbarControl添加ArcGIS Engine命令和工具。l 创建弹出式菜单l 在TOCControl中管理标签编辑l 在MapControl中绘制图形。l 为MapControl、PageLay
4、outControl和ToolbarControl创建定制工具。l 用户化ToolbarControl。l 在Windows操作系统中部署应用。二、概述本方案使用微软Visual Studio .NET开发环境加以实现,并使用了ESRI interop程序集(Interop Assemblies),它服务于被放置在.NET窗体上的、位于.NET 窗体控件(.NET Windows Controls)中的ArcGIS控件,这些程序集在托管的.NET代码和非托管的COM代码之间起了桥梁作用。对COM ArcGIS控件(COM ArcGIS Controls)成员的引用都要经过Interop程序集,
5、然后到达实际的COM对象。同样,也从COM对象经过Interop程序集到达.NET应用程序。每个ArcGIS Engine控件具有方法、属性与事件,它们能够被控件嵌入的容器(如,.NET窗体)访问。每个控件对象及其功能可以与其他ESRI ArcObjects和自定义控件组合使用,创建用户化的客户应用程序。此方案是使用了C#和Visual Basic .NET两种语言创建,但以下技术实现集中倾向于C#方案。许多开发者可能会感觉用Visual Basic .NET更舒服,那是因为他们已经比较熟悉Visual Basic 6.0代码,然而,对于Java和C+程序员来说,他们将会觉得对C#程序语言的语
6、法更熟悉。无论你使用哪种开发环境,对于使用ArcGIS控件的好坏既依赖于你的编程环境技术,也依赖于你所掌握的ArcObjects技术。在本方案中,使用ToolbarControl、TOCControl、PageLayoutControl和MapControl来为应用程序提供用户界面。这些ArcGIS控件与其他ArcObjects和ArcGIS Engine命令被开发者一起使用,用来创建一个GIS视窗应用。三、设计此方案在设计时,首先强调了ArcGIS 控件如何互相之间进行交互,其次,向开发者解释说明了ArcGIS 控件对象模型的一部分。每个.NET ArcGIS Engine控件包含有一套能够
7、被嵌入其内的窗口即时访问的属性页。这些属性些为控件属性和方法的选择提供了捷径,并且允许开发者不写任何代码即可创建一个应用程序。本方案并没有使用属性页,而是采用写代码的方式建立应用程序。关于属性页的更进一步的信息,请参考ArcGIS开发帮助(ArcGIS Developer Help)。四、条件需求要顺利地完成以下方案,你需要以下条件(对于部署的需求将在后续的部署章节涉及到):l 安装具有授权文件的ArcGIS Engine开发工具包(Developer Kit),使之能够用于开发。l 安装有微软Visual Studio .NET 2003开发环境和微软.NET Framework 1.1及其
8、相应协议。l 熟悉微软Windows操作系统和Microsoft Visual Studio .NET的工作知识,会用C#或Visual Basic .NET编程语言。当然,此方案中提供了一些如何在Microsoft Visual Studio .NET中使用ArcGIS控件的信息,但它不能替代对开发环境的培训。l 不需要对ESRI其它软件有足够的经验,但如果以前对ArcObjects有所接触并对ArcGIS应用(如,ArcCatalog,ArcMap)有一个基本了解,则对于开发更有利。l 访问来自本方案的样例数据和代码,它位于:DeveloperKitSamplesDeveloper_Gui
9、de_Scenarios ArcGIS_EngineBuilding_an_ArcGIS_Control_ApplicationMap_Viewer本方案中使用到的控件和库如下:l AxMapControll AxTOCControll AxPageLayoutControll AxToolbarControll ESRI.ArcGIS.Cartol ESRI.ArcGIS.Systeml ESRI.ArcGIS.Displayl ESRI.ArcGIS.SystemUIl ESRI.ArcGIS.Geometryl ESRI.ArcGIS.Utilityl esriMapControll e
10、sriTOCControll esriPageLayoutControll esriToolbarControl五、实现下面的实现过程中提供了你成功完成方案所需所有代码。假设你对于开发环境已经有了一定的知识,所以下面没有逐步地详细介绍如何用Microsoft Visual Studio .NET开发应用。(一) 加载ArcGIS控件在你为应用程序编写代码之前,应该先将应用程序将用到的ArcGIS控件和其他ArcGIS Engine库引用装载到开发环境之中。1. 启动Visual Studio .NET,并从新建项目对话框中创建一个新的Visual C# “Windows应用程序”项目。2. 将
11、项目命名为“Controls”,并选择位置存取该项目。3. 在“工具箱”的“Windows窗体”标签栏中单击右键,然后从上下文菜单中选择“添加/移除项(I)”。4. 在“自定义工具箱”中选择“.NET Framework组件”,并复选“AxMapControl”,“AxPageLayoutControl”,“AxTOCControl”和“AxToolbarControl”,单击确定按钮。这样所选择的控件将显示在工具箱的Windows窗体标签栏中。5. 单击项目菜单,并选择“添加引用(R)”。6. 在添加引用对话框中,双击“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.Disp
12、lay”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS.Utility”。单击确定。注:对于ESRI .NET程序集,将通过具体实例来说明,并使用.NET框架提供的COM传送服务从你的C#项目中调用ESRI对象库中的实体对象。(二) 在容器中嵌入ArcGIS控件在你能够访问每个控件的事件、属性和方法之前,需要将控件嵌入到.NET容器中。一旦将控件嵌入窗体内,它们将图形化应用程序的用户界面。1. 在设计模式下打开.NET窗体。2. 双击工具箱Windows标签栏中的AxMapCont
13、rol控件,将MapControl加入到窗体上。3. 再将AxPageLayoutControl、AxTOCControl和AxToolbarControl如上添加到窗体中。4. 重新调整窗体上各个控件的大小和位置,调整结果如下所示。5. 在窗体上双击显示窗体代码窗口,在代码窗口的顶部增加“using”命令:using System;using System.Windows.Forms;/ ArcGIS Engine引用using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ESRI.
14、ArcGIS.Geometry;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.ToolbarControl;using ESRI.ArcGIS.TOCControl;注:需注意C#是区分大小写的。当你键入“ESRI.”时,智能敏感的自动完成功能将允许你通过按Tab键完成下一节。(三) 加载Map文档到MapControl与PageLayoutControl 单独的数据层或者使用ArcMap、ArcGIS桌面应用程序产生的图形文档,能够被加载到MapControl和PageLayoutControl中。你可以加载样例图形文档,或者加载你自己的图形文
15、档。后面你将增加一个浏览图形文档的对话框。1. 选择Form_Load事件,并输入下列代码(如果你使用你自己的图形文档,要替换为正确的文件名):/ 使用相对路径向PageLayoutControl加载一个图形文档string filename = .DataArcGIS_Engine_Developer_Guidegulf of st. lawrence.mxd;if ( axPageLayoutControl1.CheckMxFile(filename) )axPageLayoutControl1.LoadMxFile(filename, );2. 在设计模式显示窗体并从属性窗选择axPag
16、eLayoutControl1控件,显示axPageLayoutControl事件。在OnPageLayoutReplaced事件上双击向代码窗口添加该事件的处理函数。3. 在axPageLayoutControl1_OnPageLayoutReplaced事件中键入以下向MapControl加载样例图形文档的代码。当文档被装载入PageLayoutControl时OnPageLayoutReplaced事件将会被触发。private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, ESRI.ArcGIS.PageLa
17、youtControl.IPageLayoutControlEvents_OnPageLayoutReplacedEvent e)/ 加载同样的文档到MapControlaxMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename, null, null);/ 设置MapControl显示范围至数据的全局范围axMapControl1.Extent = axMapControl1.FullExtent;(四) 设置ToolbarControl与TOCControl控件的绑定控件对于此应用程序,TOCControl和ToolbarC
18、ontrol控件将与PageLayoutControl相互协作,而不是MapControl。为此PageLayoutControl必须设置为绑定控件。TOCControl使用绑定的ActiveView显示图形、图层和符号。而位于ToolbarControl上的任何命令、工具或菜单项会受绑定控件的显示影响。1. 在Form_Load事件中的加载文档代码的后面键入以下红色部分内容:private void Form1_Load(object sender, System.EventArgs e)/ 使用相对路径向PageLayoutControl加载一个图形文档string filename =
19、.DataArcGIS_Engine_Developer_Guidegulf of st. lawrence.mxd;if ( axPageLayoutControl1.CheckMxFile(filename) )axPageLayoutControl1.LoadMxFile(filename, );/ 设置绑定控件axTOCControl1.SetBuddyControl(axPageLayoutControl1);axToolbarControl1.SetBuddyControl(axPageLayoutControl1);2. 生成并运行应用程序。图形文档被加载到PageLayoutC
20、ontrol,并且TOCControl列出了图形文档中的数据图层。使用TOCControl通过复选和取消复选框控制图层的可见性。默认地,图形文档的焦点图(focus map)被装入MapControl控件。在这种当前情况下,ToolbarControl控件显示是空的,因为没有为它添加任何命令。试着缩放窗体,你会注意到控件不会改变尺寸。(五) 处理窗口缩放当窗口在运行时进行缩放时,PageLayoutControl和MapControl不会自动改变自身的尺寸。要改变控件的尺寸以便它们总是与匹配窗口的范围,你必须将控件锚定在窗口上。如果PageLayoutControl或MapControl包含大
21、量的数据,在窗口缩放期间重绘这些数据显得相当重要。为了提高执行效率,你可以禁止数据重绘直到缩放操作完成后再重绘之。在缩放时,可以用一个可伸缩的位图来替代重绘数据。1. 在设计模式显示窗体并从属性窗口中选择axPageLayoutControl1。单击Anchor属性,将axPageLayoutControl1锚定在窗体的顶、左、底和右部。2. 锚定axMapControl控件到窗体的顶、左和底部。3. 在Form_Load事件的开头增加以下代码:/ 当缩放时禁止重绘this.SetStyle(ControlStyles.EnableNotifyMessage, true);4. 向类增加以下常
22、量: public class Form1 : System.Windows.Forms.Form/ private const int WM_ENTERSIZEMOVE = 0x231;private const int WM_EXITSIZEMOVE = 0x232;/ 5. 向重载的OnNotifyMessage方法中增加下列代码:protected override void OnNotifyMessage(Message m)base.OnNotifyMessage (m);/ 以下为手工添加的代码if ( m.Msg = WM_ENTERSIZEMOVE)axMapControl1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS_Engine开发入门教程 c# ArcGIS_Engine 开发 入门教程
限制150内