首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

利用ArcGIS Engine、VS .NET跟Windows控件开发GIS应用

2012-10-21 
利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用此过程说明适合那些使用.NET建立和部署应用的开发者,

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤。

你可以在下面的目录下找到相应的样例程序:

<安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer

注:ArcGIS样例程序不包含在ArcGIS Engine开发工具包“典型”安装方式中。如果你没有安装它们,则可以重新运行开发工具包安装向导,选择“定制”或“修改”方式,并选择软件开发包下的样例项进行安装。

一、项目描述

利用视窗控件建立应用程序的目标是演示并使你熟悉在微软Visual Studio .NET API中使用标准ArcGIS控件开发和部署GIS应用所需的步聚。本节中使用了Visual Studio .NET开发环境中的MapControl、 PageLayoutControl、TOCControl和ToolbarControl等视窗控件。COM、Java和C++程序员应该参考如下章节:利用ActiveX建立应用程序、利用可视化JavaBeans建立应用程序、建立命令行方式的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、PageLayoutControl和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程序集,然后到达实际的COM对象。同样,也从COM对象经过Interop程序集到达.NET应用程序。每个ArcGIS Engine控件具有方法、属性与事件,它们能够被控件嵌入的容器(如,.NET窗体)访问。每个控件对象及其功能可以与其他ESRI ArcObjects和自定义控件组合使用,创建用户化的客户应用程序。

此方案是使用了C#和Visual Basic .NET两种语言创建,但以下技术实现集中倾向于C#方案。许多开发者可能会感觉用Visual Basic .NET更舒服,那是因为他们已经比较熟悉Visual Basic 6.0代码,然而,对于Java和C++程序员来说,他们将会觉得对C#程序语言的语法更熟悉。无论你使用哪种开发环境,对于使用ArcGIS控件的好坏既依赖于你的编程环境技术,也依赖于你所掌握的ArcObjects技术。

在本方案中,使用ToolbarControl、TOCControl、PageLayoutControl和MapControl来为应用程序提供用户界面。这些ArcGIS控件与其他ArcObjects和ArcGIS Engine命令被开发者一起使用,用来创建一个GIS视窗应用。

三、设计

此方案在设计时,首先强调了ArcGIS 控件如何互相之间进行交互,其次,向开发者解释说明了ArcGIS 控件对象模型的一部分。

每个.NET ArcGIS Engine控件包含有一套能够被嵌入其内的窗口即时访问的属性页。这些属性些为控件属性和方法的选择提供了捷径,并且允许开发者不写任何代码即可创建一个应用程序。本方案并没有使用属性页,而是采用写代码的方式建立应用程序。关于属性页的更进一步的信息,请参考ArcGIS开发帮助(ArcGIS Developer Help)

四、条件需求

要顺利地完成以下方案,你需要以下条件(对于部署的需求将在后续的部署章节涉及到):

l       安装具有授权文件的ArcGIS Engine开发工具包(Developer Kit),使之能够用于开发。

l       安装有微软Visual Studio .NET 2003开发环境和微软.NET Framework 1.1及其相应协议。

l       熟悉微软Windows操作系统和Microsoft Visual Studio .NET的工作知识,会用C#或Visual Basic .NET编程语言。当然,此方案中提供了一些如何在Microsoft Visual Studio .NET中使用ArcGIS控件的信息,但它不能替代对开发环境的培训。

l       不需要对ESRI其它软件有足够的经验,但如果以前对ArcObjects有所接触并对ArcGIS应用(如,ArcCatalog,ArcMap)有一个基本了解,则对于开发更有利。

l       访问来自本方案的样例数据和代码,它位于:

<安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer

本方案中使用到的控件和库如下:


5.     单击项目菜单,并选择“添加引用(R)…”。

6.     在添加引用对话框中,双击“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.Display”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS.Utility”。单击确定

利用ArcGIS Engine、VS .NET跟Windows控件开发GIS应用

注:对于ESRI .NET程序集,将通过具体实例来说明,并使用.NET框架提供的COM传送服务从你的C#项目中调用ESRI对象库中的实体对象。

(二)在容器中嵌入ArcGIS控件

在你能够访问每个控件的事件、属性和方法之前,需要将控件嵌入到.NET容器中。一旦将控件嵌入窗体内,它们将图形化应用程序的用户界面。

1.       在设计模式下打开.NET窗体。

2.       双击工具箱Windows标签栏中的AxMapControl控件,将MapControl加入到窗体上。

3.       再将AxPageLayoutControl、AxTOCControl和AxToolbarControl如上添加到窗体中。

4.       重新调整窗体上各个控件的大小和位置,调整结果如下所示。

利用ArcGIS Engine、VS .NET跟Windows控件开发GIS应用

5.       在窗体上双击显示窗体代码窗口,在代码窗口的顶部增加“using”命令:


3.     在axPageLayoutControl1_OnPageLayoutReplaced事件中键入以下向MapControl加载样例图形文档的代码。当文档被装载入PageLayoutControl时OnPageLayoutReplaced事件将会被触发。

     


(五)处理窗口缩放

当窗口在运行时进行缩放时,PageLayoutControl和MapControl不会自动改变自身的尺寸。要改变控件的尺寸以便它们总是与匹配窗口的范围,你必须将控件锚定在窗口上。如果PageLayoutControl或MapControl包含大量的数据,在窗口缩放期间重绘这些数据显得相当重要。为了提高执行效率,你可以禁止数据重绘直到缩放操作完成后再重绘之。在缩放时,可以用一个可伸缩的位图来替代重绘数据。

1.       在设计模式显示窗体并从属性窗口中选择axPageLayoutControl1。单击Anchor属性,将axPageLayoutControl1锚定在窗体的顶、左、底和右部。

2.       锚定axMapControl控件到窗体的顶、左和底部。

利用ArcGIS Engine、VS .NET跟Windows控件开发GIS应用

3.       在Form_Load事件的开头增加以下代码:


(七)给PageLayoutControl添加弹出式菜单

与给跟绑定控件协作的ToolbarControl增加ArcGIS Engine命令一样,按照前面的步骤,你也可以从ArcGIS Engine命令创建弹出式菜单。下面将向你的应用程序中增加与PageLayoutControl协作的弹出式菜单。当在PageLayoutControl可视区域点击鼠标右键的时候,弹出式菜单将显示。

1.       向类中添加如下的成员变量(红色部分):

 


(八)在TOCControl中控制标签编辑

TOCControl默认允许用户自动地切换图层的可见性并改变显示在目录表中的名称。你可以增加代码防止用户在编辑名称时输入空的字符串。

1.       在Form_Load事件的开始增加下列代码。

     


(九)在MapControl上绘制图形

你可以将MapControl作为缩略图窗体使用,并在其上绘制显示PageLayoutControl内的焦点地图的当前范围。当你浏览PageLayoutControl数据框架内的数据时,你将看到缩略图窗口也进行了更新。

注:使用地图导航工具导航焦点图(活动图)将改变PageLayoutControl中焦点地图的范围并引起MapControl更新。使用页面布局工具导航页面布局将改变页面布局的范围(不是PageLayoutControl中的焦点图的范围),而MapControl将不更新。

1.       向类中增加下列成员变量:


(十)创建自定义工具

创建协同MapControl和PageLayoutControl一起运作的自定义命令和工具,与你或许已经做过的创建ESRI ArcMap应用程序命令非常相似。你将创建一个在PageLayoutControl鼠标点击位置添加包含当天日期的文本元素的自定义工具。不管用何种方法,创建同MapControl和ToolbarControl协作的命令与同PageLayoutControl一样。

这个自定义工具的相关代码与其他本方案源代码一样很有用。如果你想要直接使用自定义命令,而不自己创建它,请直接到第24步。

1.       从新建项目对话框创建一个新的Visual C# “类库”项目。

2.       将项目命名为“Commands”,并选择保存位置存贮之。

3.       单击项目菜单并选择“添加引用(R)…”。

4.       在添加引用对话框中,复选“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.Display”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS..Utility”和“ESRI.ArcGIS.ControlCommands”。

5.       在项目中增加一个类,名字叫AddDateTool。

6.       点击项目菜单并选择添加现有项,浏览样例源码目录并找到date.bmp文件将其加入到你的项目。

7.       在解决方案资源管理器中点击date.bmp在属性窗口显示其属性。改变生成操作属性为嵌入的资源。这张位图将被用来作为命令按钮的外观。

8.       改变AddDateTool的命名空间的名称为CSharpDotNETCommands。


(十一)自定义ToolbarControl

同在Form_Load事件中向ToolbarControl控件增加ArcGIS Engine命令和工具一样,你也可以使用定制对话框和自定义ToolbarControl的方式添加命令和工具。要实现它,就要将ToolbarControl置为定制模式并显示定制对话框。

1.       向类中增加下列成员变量:


10.     结束定制应用。使用选择工具移动包含日期的文本元素。

利用ArcGIS Engine、VS .NET跟Windows控件开发GIS应用

六、部署

要将应用程序成功地部署到另一台机器上,必须为应用程序配置协议。首先,它必须检查产品协议是否有效,其次,它必须初始化协议。如果协议配置不正确有,应用程序将不能运行。

注:当采用ESRI ArcObjects开发独立运行的程序时,应用程序负责检查并配置协议选项。它通过实现CoClass AoInitialize和IAoInitialize接口来支持协议配置。应用程序运行时,在任何ESRI ArcObject功能被访问之前协议初始化必须先被执行。如果初始化失败将导致应用程序错误。

1.       向类中增加下列成员变量。

privatevoid Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)     {         // 释放COM对象并关闭AoInitialize对象         ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown();         m_AoInitialize.Shutdown();}

5.       在Release模式下生成项目和解决方案。

要将应用程序成功地部署到用户机器上:

l   要将应用程序的可执行文件和包含自定义命令的动态链接库DLL发布到用户机器上。程序集注册工具(RegAsm.exe)必须被用来向注册表增加关于自定义类的信息。

l   用户机器上需要安装有ArcGIS Engine运行时库和标准ArcGIS Engine协议。

l   客户机上需要安装Microsoft .NET Framework 1.1。

七、附加资源

下列资源可以帮助你理解和应用在本方案中在在的概念和技术。

l   在ArcGIS Engine开发工具包中包含了其他可用的文档:ArcGIS开发帮助,组件帮助,对象模型图表和适合于初学者的样例程序。

l   ArcGIS开发在线——一个Web站点,提供了最新的ArcGIS开发信息,包括程序样例和技术文档。请访问http://arcgisdeveloperonline.esri.com/

l   ESRI在线讨论组——Web站点,从其他ArcGIS开发者提供无偿援助。请访问http://support.esri.com/并点击用户论坛页签。

l   微软Visual Studio .NET开发环境中的文档。



热点排行