2.3.1 创建C#独立工程
1 在Visual Studio.NET中创建一个新的解决方案(文件-->项目-->项目),弹出新建项目对话框,如下图:
(图2.3-1)
2 选择Visual C#项目的“windows应用程序”。
3 输入工程名称为“EngineApp”,并作为默认的命名空间;选择工程存放的位置。
4 单击“确定”按钮,完成解决方案的创建。
5 修改窗体Form1的name为“Frmmain”,作为系统的主窗体。Text设置为“一个简单的ArcEngine例子”。
2.3.2 A rcGIS类库的引用
1 手工加入ESRI assembly的引用,如图所示:
(图2.3-2)
2 选择ESRI.ArcGIS.System添加其引用。
2.3.3 许可初始化
所有的应用必须在运行时初始化一个产品许可,使用esriSystem::Aoinitialize初始化产品许可。可以获得的产品许可有:ArcView、Arceditor、ArcInofo、Engine、EngineGeoGDB。
1 手工实现代码
(1)定义初始化变量m_AoInitialize(因在整个窗体中使用,所以需要定义为全局变量)
/// <summary>
/// 许可初始化变量
/// </summary>
private IAoInitialize m_AoInitialize = new AoInitializeClass();
(2)许可初始。在窗体“Frmmain”中增加Load事件,并添加如下代码:
//许可初始化
m_AoInitialize = new AoInitializeClass();
m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
(3)结束许可初始化。在窗体“Frmmain”中增加Closed事件,并添加如下代码:
//结束初始化
m_AoInitialize.Shutdown();
(4)为了在初始化的过程中更标准,我们对Load事件的代码进行完善和优化,完整代码如下:
/// <summary>
/// 许可初始化变量
/// </summary>
private IAoInitialize m_AoInitialize = new AoInitializeClass();
private void Frmmain_Load(object sender, System.EventArgs e)
{
//************************************************************************
//*许可初始化,开始
//************************************************************************
m_AoInitialize = new AoInitializeClass();
if (m_AoInitialize == null)
{
MessageBox.Show("Unable to initialize. This application cannot run!");
Application.Exit();
}
//初始化应用程序
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus=m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
string message = "";
//没有许可
if (licenseStatus == esriLicenseStatus.esriLicenseNotInitialized)
{
message = "You are not licensed to run this product!";
}
//许可正在使用
else if (licenseStatus == esriLicenseStatus.esriLicenseUnavailable)
{
message = "There are insuffient licenses to run!";
MessageBox.Show (message);
Application.Exit();
}
//未知错误
else if (licenseStatus == esriLicenseStatus.esriLicenseFailure)
{
message = "Unexpected license failure! Please contact your administrator.";
MessageBox.Show (message);
Application.Exit();
}
//已经初始化
else if (licenseStatus == esriLicenseStatus.esriLicenseAlreadyInitialized)
{
message = "The license has already been initialized! Please check your implementation.";
MessageBox.Show (message);
Application.Exit();
}
//************************************************************************
//*许可初始化,结束
//************************************************************************
}
private void Frmmain_Closed(object sender, System.EventArgs e)
{
//结束初始化
m_AoInitialize.Shutdown();
m_AoInitialize=null;
}
2 使用License Control Manager 进行初始化
(1)在工具箱中添加选项卡“ArcGIS”
(图2.3-3)
(2)在选项卡“ArcGIS”中的右键菜单中,选择“添加/移除项”,添加组件。
|
(图2.3-4) |
(图2.3-5) |
(3)选择“LicenseControl”控件,并单击“确定”添加到选项卡中。
(图2.3-6)
(4)像拖动其它控件一样,将LicenseControl控件添加到主窗体Frmmain上。
(5)在窗体上选择加入的“LicenseControl”控件,并设置其属性。
(图2.3-7)
注意:
1.许可初始化必须在所有ArcObjects代码运行以前进行。
2.在程序运行期间产品许可只能被确认一次。
3.扩展许可可以在需要时被检入检出。
4.不能合并或混合产品许可和扩展许可。
5.应该写代码来检查可获取代码的级别并从中检出许可。
6.尽可能使用最低级别的许可。
2.3.2 基本地图控件加载
ArcGIS Engine提供了大量的高级开发控件,使开发人员可以建立或扩展GIS应用程序和创建高质量的地图用户界面,这些控件包括MapControl、PageLayoutControl、ReaderControl、TOCControl和ToolbarControl.。GlobeControl和SceneControl也可以获得,但使用这两个控件的应用程序必须具有ArcGIS Engine的3D分析选项授权。这些控件都可以作为ActiveX控件、.NET Windows控件和Visual JavaBean获得。随着本教程的推进,我们逐步介绍常用的控件,在此我们首先介绍MapControl控件。
ArcGIS控件可以通过两种方式建立应用程序,首先,ArcGIS控件可以嵌入到现有的应用程序中以增加制图功能;其次,ArcGIS控件可用于创建新的独立应用程序。在前一种情况中,单个的ArcGIS控件可以嵌入到应用程序中,在后一中情况中,TOCControl和ToolbarControl控件可以其它的ArcGIS控件结合起来组成应用程序框架的组成部分。
MapControl控件是一个很有用的控件,当它添加到工程以后,对应于ArcMap桌面应用程序中的“数据”(Data View)。MapControl中封装了Map对象,用ArcMap创作的地图文档可以装载到MapControl中,以便节省开发人员编程创作的地图时间,它提供了许多方法、属性和事件,可以帮助我们完成以下主要功能:
(1)管理控件的外观;
(2)管理控件的显示属性;
(3)管理Map的特性;
(4)添加和管理控件中的地图图层数据,包括添加、删除数据文件,显示数据等。
(1)在选项卡“ArcGIS”中的右键菜单中,选择“添加/移除项”,添加组件。
|
(图2.3-8) |
(图2.3-9) |
(3)选择“MapControl”控件,并单击“确定”添加到选项卡中。
(图2.3-10)
(4)像拖动其它控件一样,将MapControl控件添加到主窗体Frmmain上。
(5)在窗体上选择加入的“MapControl”控件,并设置其属性。
注意:在添加MapControl的过程中系统会自动地添加ArcGIS的类库的引用。大家可以注意看看,都添加那些引用?
在这里我们通过设置MapControl控件的属性对话框来加载要显示的图层数据。实现步骤如下:
(1)右键单击MapControl控件,弹出右键菜单;
(2)在右键菜单中选择Properties菜单项,弹出属性对话框;
(3)选择Map标签;
(4)点击Add按钮并定位到需要添加的数据所在的目录(如);
(5)选取country.Shp文件。
(图2.3-11)
在MapControl的属性页中可以设置地图和图层的相关属性项,设置完成后,单击“确认”关闭属性页,编译运行系统,可看到如下所示的结果。
(图2.3-12)
到现在为止,我们实现了一个关于ArcGIS Engine的最基本的工程。当然,这只是一个最简单的工程,在后面的章节中,我们将详细的介绍如何实现高级的GIS功能,不断地丰富我们的这个工程功能,使它逐渐强大起来。
浙公网安备 33010602011771号