利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx

上传人:b****7 文档编号:9267491 上传时间:2023-02-03 格式:DOCX 页数:49 大小:33.21KB
下载 相关 举报
利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx_第1页
第1页 / 共49页
利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx_第2页
第2页 / 共49页
利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx_第3页
第3页 / 共49页
利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx_第4页
第4页 / 共49页
利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx

《利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx》由会员分享,可在线阅读,更多相关《利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx(49页珍藏版)》请在冰豆网上搜索。

利用ArcGIS EngineVS NET和Windows控件开发GIS应.docx

利用ArcGISEngineVSNET和Windows控件开发GIS应

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

建立和部署应用的方法和步骤。

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

<安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\

ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer

注:

ArcGIS样例程序不包含在ArcGISEngine开发工具包“典型”安装方式中。

果你没有安装它们,则可以重新运行开发工具包安装向导,选择“定制”或“修改

”方式,并选择软件开发包下的样例项进行安装。

一、项目描述

利用视窗控件建立应用程序的目标是演示并使你熟悉在微软VisualStudio.NET

API中使用标准ArcGIS控件开发和部署GIS应用所需的步聚。

本节中使用了Visual

Studio.NET开发环境中的MapControl、PageLayoutControl、TOCControl和

ToolbarControl等视窗控件。

COM、Java和C++程序员应该参考如下章节:

利用

ActiveX建立应用程序、利用可视化JavaBeans建立应用程序、建立命令行方式的

Java应用和建立命令行方式的C++应用。

本节演示了创建查看ArcMap和ArcGIS桌面应用图形文档的GIS应用程序的步骤。

节包含了以下技术:

l在微软VisualStudio.NET中加载和嵌入ArcGIS控件。

l向PageLayoutControl和MapControl中加载图形文档。

l设置ToolbarControl和TOCControl的绑定控件。

l处理窗口缩放。

l向ToolbarControl添加ArcGISEngine命令和工具。

l创建弹出式菜单

l在TOCControl中管理标签编辑

l在MapControl中绘制图形。

l为MapControl、PageLayoutControl和ToolbarControl创建定制工具。

l用户化ToolbarControl。

l在Windows操作系统中部署应用。

二、概述

本方案使用微软VisualStudio.NET开发环境加以实现,并使用了ESRIinterop程

序集(InteropAssemblies),它服务于被放置在.NET窗体上的、位于.NET窗体控

件(.NETWindowsControls)中的ArcGIS控件,这些程序集在托管的.NET代码和非

托管的COM代码之间起了桥梁作用。

对COMArcGIS控件(COMArcGISControls)成员

的引用都要经过Interop程序集,然后到达实际的COM对象。

同样,也从COM对象经

过Interop程序集到达.NET应用程序。

每个ArcGISEngine控件具有方法、属性与事

件,它们能够被控件嵌入的容器(如,.NET窗体)访问。

每个控件对象及其功能可以

与其他ESRIArcObjects和自定义控件组合使用,创建用户化的客户应用程序。

此方案是使用了C#和VisualBasic.NET两种语言创建,但以下技术实现集中倾向

于C#方案。

许多开发者可能会感觉用VisualBasic.NET更舒服,那是因为他们已

经比较熟悉VisualBasic6.0代码,然而,对于Java和C++程序员来说,他们将会

觉得对C#程序语言的语法更熟悉。

无论你使用哪种开发环境,对于使用ArcGIS控件

的好坏既依赖于你的编程环境技术,也依赖于你所掌握的ArcObjects技术。

在本方案中,使用ToolbarControl、TOCControl、PageLayoutControl和

MapControl来为应用程序提供用户界面。

这些ArcGIS控件与其他ArcObjects和

ArcGISEngine命令被开发者一起使用,用来创建一个GIS视窗应用。

三、设计

此方案在设计时,首先强调了ArcGIS控件如何互相之间进行交互,其次,向开发

者解释说明了ArcGIS控件对象模型的一部分。

每个.NETArcGISEngine控件包含有一套能够被嵌入其内的窗口即时访问的属性页

这些属性些为控件属性和方法的选择提供了捷径,并且允许开发者不写任何代码

即可创建一个应用程序。

本方案并没有使用属性页,而是采用写代码的方式建立应

用程序。

关于属性页的更进一步的信息,请参考ArcGIS开发帮助(ArcGIS

DeveloperHelp)。

四、条件需求

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

及到):

l安装具有授权文件的ArcGISEngine开发工具包(DeveloperKit),使之能

够用于开发。

l安装有微软VisualStudio.NET2003开发环境和微软.NETFramework

1.1及其相应协议。

l熟悉微软Windows操作系统和MicrosoftVisualStudio.NET的工作知识

,会用C#或VisualBasic.NET编程语言。

当然,此方案中提供了一些如何在

MicrosoftVisualStudio.NET中使用ArcGIS控件的信息,但它不能替代对开发环

境的培训。

l不需要对ESRI其它软件有足够的经验,但如果以前对ArcObjects有所接触

并对ArcGIS应用(如,ArcCatalog,ArcMap)有一个基本了解,则对于开发更有利。

 

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

<安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\

ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer

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

lAxMapControl

lAxTOCControl

lAxPageLayoutControl

lAxToolbarControl

lESRI.ArcGIS.Carto

lESRI.ArcGIS.System

lESRI.ArcGIS.Display

lESRI.ArcGIS.SystemUI

lESRI.ArcGIS.Geometry

lESRI.ArcGIS.Utility

lesriMapControl

lesriTOCControl

lesriPageLayoutControl

lesriToolbarControl

五、实现

下面的实现过程中提供了你成功完成方案所需所有代码。

假设你对于开发环境已经

有了一定的知识,所以下面没有逐步地详细介绍如何用MicrosoftVisual

Studio.NET开发应用。

(一)加载ArcGIS控件

在你为应用程序编写代码之前,应该先将应用程序将用到的ArcGIS控件和其他

ArcGISEngine库引用装载到开发环境之中。

1.启动VisualStudio.NET,并从新建项目对话框中创建一个新的VisualC#

“Windows应用程序”项目。

2.将项目命名为“Controls”,并选择位置存取该项目。

3.在“工具箱”的“Windows窗体”标签栏中单击右键,然后从上下文菜单中

选择“添加/移除项(I)…”。

4.在“自定义工具箱”中选择“.NETFramework组件”,并复选“

AxMapControl”,“AxPageLayoutControl”,“AxTOCControl”和“

AxToolbarControl”,单击确定按钮。

这样所选择的控件将显示在工具箱的

Windows窗体标签栏中。

 

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

6.在添加引用对话框中,双击“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.

Display”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.

ArcGIS.SystemUI”,“ESRI.ArcGIS.Utility”。

单击确定。

 

注:

对于ESRI.NET程序集,将通过具体实例来说明,并使用.NET框架提供的COM传

送服务从你的C#项目中调用ESRI对象库中的实体对象。

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

在你能够访问每个控件的事件、属性和方法之前,需要将控件嵌入到.NET容器中。

一旦将控件嵌入窗体内,它们将图形化应用程序的用户界面。

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

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

窗体上。

3.再将AxPageLayoutControl、AxTOCControl和AxToolbarControl如上添加

到窗体中。

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

 

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

usingSystem;

usingSystem.Windows.Forms;

//ArcGISEngine引用

usingESRI.ArcGIS.SystemUI;

usingESRI.ArcGIS.Carto;

usingESRI.ArcGIS.Display;

usingESRI.ArcGIS.Geometry;

usingESRI.ArcGIS.esriSystem;

usingESRI.ArcGIS.ToolbarControl;

usingESRI.ArcGIS.TOCControl;

注:

需注意C#是区分大小写的。

当你键入“ESRI.”时,智能敏感的自动完成功能

将允许你通过按Tab键完成下一节。

(三)加载Map文档到MapControl与PageLayoutControl

单独的数据层或者使用ArcMap、ArcGIS桌面应用程序产生的图形文档,能够被加载

到MapControl和PageLayoutControl中。

你可以加载样例图形文档,或者加载你自

己的图形文档。

后面你将增加一个浏览图形文档的对话框。

1.选择Form_Load事件,并输入下列代码(如果你使用你自己的图形文档,

要替换为正确的文件名):

//使用相对路径向PageLayoutControl加载一个图形文档

stringfilename=@"..\..\..\..\..\..\..\..

\Data\\ArcGIS_Engine_Developer_Guide\\gulfofst.lawrence.mxd";

if(axPageLayoutControl1.CheckMxFile(filename))

{

axPageLayoutControl1.LoadMxFile(filename,"");

}

2.在设计模式显示窗体并从属性窗选择axPageLayoutControl1控件,显示

axPageLayoutControl事件。

在OnPageLayoutReplaced事件上双击向代码窗口添加

该事件的处理函数。

 

3.在axPageLayoutControl1_OnPageLayoutReplaced事件中键入以下向

MapControl加载样例图形文档的代码。

当文档被装载入PageLayoutControl时

OnPageLayoutReplaced事件将会被触发。

privatevoidaxPageLayoutControl1_OnPageLayoutReplaced(object

sender,ESRI.ArcGIS.PageLayoutControl.

IPageLayoutControlEvents_OnPageLayoutReplacedEvente)

{

//加载同样的文档到MapControl

axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,

null,null);

//设置MapControl显示范围至数据的全局范围

axMapControl1.Extent=axMapControl1.FullExtent;

}

(四)设置ToolbarControl与TOCControl控件的绑定控件

对于此应用程序,TOCControl和ToolbarControl控件将与PageLayoutControl相互

协作,而不是MapControl。

为此PageLayoutControl必须设置为绑定控件。

TOCControl使用绑定的ActiveView显示图形、图层和符号。

而位于

ToolbarControl上的任何命令、工具或菜单项会受绑定控件的显示影响。

1.在Form_Load事件中的加载文档代码的后面键入以下红色部分内容:

privatevoidForm1_Load(objectsender,System.EventArgse)

{

//使用相对路径向PageLayoutControl加载一个图形文档

stringfilename=@"..\..\..\..\..\..\..\..

\Data\\ArcGIS_Engine_Developer_Guide\\gulfofst.lawrence.mxd";

if(axPageLayoutControl1.CheckMxFile(filename))

{

axPageLayoutControl1.LoadMxFile(filename,"");

}

//设置绑定控件

axTOCControl1.SetBuddyControl(axPageLayoutControl1);

axToolbarControl1.SetBuddyControl(axPageLayoutControl1);

}

2.生成并运行应用程序。

图形文档被加载到PageLayoutControl,并且

TOCControl列出了图形文档中的数据图层。

使用TOCControl通过复选和取消复选框

控制图层的可见性。

默认地,图形文档的焦点图(focusmap)被装入MapControl控

件。

在这种当前情况下,ToolbarControl控件显示是空的,因为没有为它添加任何

命令。

试着缩放窗体,你会注意到控件不会改变尺寸。

加入LicenseControl控件,或使用这个类初始化许可文件。

说明:

在应用程序入口处要进行许可文件初始化,否则不能正确运行程序。

[STAThread]

staticvoidMain()

{

LicenseInitializerlicense=newLicenseInitializer();

if(license.InitializeApplication())

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newForm1());

}

else

{

license.ShutdownApplication();

}

}

许可文件初始化类:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingESRI.ArcGIS.esriSystem;

namespaceEngineWApp

{

publicclassLicenseInitializer

{

privateIAoInitializem_AoInitialize=newAoInitializeClass();

publicLicenseInitializer()

{

}

publicboolInitializeApplication()

{

boolbInitialized=true;

if(m_AoInitialize==null)

{

System.Windows.Forms.MessageBox.Show("Unabletoinitialize.thisapplicationcannotrun!

");

bInitialized=false;

}

//初始化应用程序

esriLicenseStatuslicenseStatus=esriLicenseStatus.esriLicenseUnavailable;

licenseStatus=CheckOutLicenses(esriLicenseProductCode.esriLicenseProductCodeEngine);

if(licenseStatus!

=esriLicenseStatus.esriLicenseCheckedOut)

{

licenseStatus=CheckOutLicenses(esriLicenseProductCode.esriLicenseProductCodeArcView);

if(licenseStatus!

=esriLicenseStatus.esriLicenseCheckedOut)

{

licenseStatus=CheckOutLicenses(esriLicenseProductCode.esriLicenseProductCodeArcEditor);

if(licenseStatus!

=esriLicenseStatus.esriLicenseCheckedOut)

{

licenseStatus=CheckOutLicenses(esriLicenseProductCode.esriLicenseProductCodeArcInfo);

if(licenseStatus!

=esriLicenseStatus.esriLicenseCheckedOut)

{

System.Windows.Forms.MessageBox.Show(LicenseMessage(licenseStatus));

bInitialized=false;

}

}

}

}

returnbInitialized;

}

publicvoidShutdownApplication()

{

if(m_AoInitialize==null)

{

return;

}

//关闭AoInitialize对象

m_AoInitialize.Shutdown();

m_AoInitialize=null;

System.Windows.Forms.MessageBox.Show("许可文件初始化失败!

请查看ArcGISDeskTop许可文件或Engine许可文件是否可用。

");

}

privateesriLicenseStatusCheckOutLicenses(esriLicenseProductCodeproductCode)

{

esriLicenseStatuslicenseStatus;

//是否产品是可能的

licenseStatus=m_AoInitialize.IsProductCodeAvailable(productCode);

//用相应的许可文件进行初始化

if(licenseStatus==esriLicenseStatus.esriLicenseAvailable)

{

licenseStatus=m_AoInitialize.Initialize(productCode);

}

returnlicenseStatus;

}

privatestringLicenseMessage(esriLicenseStatuslicenseStatus)

{

stringmessage="";

//没有许可

if(licenseStatus==esriLicenseStatus.esriLicenseNotInitialized)

{

message="Youarenotlicensedtorunthisproduct";

}

//许可正在使用

elseif(licenseStatus==esriLicenseStatus.esriLicenseUnavailable)

{

message="Thereareinsuffientlicensestorun!

";

}

//未知错误

elseif(licenseStatus==esriLicenseStatus.esriLicenseFailure)

{

message="Unexpectedlicensefailure!

Pleasecontactyouradministrator.";

}

//已经初始化

elseif(licenseStatus==esriLicenseStatus.esriLicenseAlreadyInitialized)

{

message="Thelicensehasalreadybeeninitialized!

Pleasecheckyourimplementation.";

}

returnmessage;

}

}

}

(五)处理窗口缩放

当窗口在运行时进行缩放时,PageLayoutControl和MapControl不会自动改变自身

的尺寸。

要改变控件的尺寸以便它们总是与匹配窗口的范围,你必须将控件锚定在

窗口上。

如果PageLayoutControl或MapControl包含大量的数据,在窗口缩放期间

重绘这些数据显得相当重要。

为了提高执行效率,你可以禁止数据重绘直到缩放操

作完成后再重绘之。

在缩放时,可以用一个可伸缩的位图来替代重绘数据。

1.在设计模式显示窗体并从属性窗口中选择axPageLayoutControl1。

单击

Anchor属性,将axPageLayoutControl1锚定在窗体的顶、左、底和右部。

 

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

 

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

//当缩放时禁止重绘

this.SetStyle(ControlStyles.EnableNotifyMessage,true);

4.向类增加以下常量:

publicclas

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1