ArcGIS Engine入门教程_第四章_创建Engine应用程序

1
分享 2016-03-11
ArcGIS Engine 10.3.1提供了一些功能非常强大的控件可以帮助开发人员快速的开发自己的GIS应用,例如:

· MapControl
· PageLayoutControl
· TOCControl
· ToolbarControl
· SceneControl
· GlobeControl
· LicenseControl
· SymbologyControl


本章主要讲解如何使用ArcGIS Engine构建GIS应用。通过示例主要练习:如何创建模板工程,如何使用MapControl、ToolbarControl、TOCControl等控件创建程序,如何向工具栏添加ArcGIS Engine内置的工具和命令,如何浏览mxd地图文档,如何向地图控件中添加地图文档,如何添加要素类,如何读取要素类的属性信息并且显示到Grid控件中。

1.1 创建Engine应用程序

首先,我们创建一个模板工程,不需要写任何代码就可以成功运行。可以浏览地图,打开mxd地图文档,对地图进行缩放,漫游,点击查询属性等。

1. 从开始菜单中启动Visual Studio 2013,启动画面如下:



2. 从“File”->“New”选中“Project”。从这一步开始创建一个Engine工程。



3. 弹出的新建工程对话框中,左侧点击ArcGIS旁边的小三角,下拉列表中选择“Extending ArcObjects”,右侧界面中选中“MapControl Application”,为该模板工程命名,默认为“MapControlApplication1”,点击“Browse”,选择要存放的位置,点击“OK”。



4. 双击解决方案中右侧的MainForm.cs,弹出该模板工程的界面。



5. 在DEBUG菜单中点击Start Debugging选项,运行程序。



6. 弹出运行界面。



7. 选择打开地图文档工具,弹出Open界面,浏览到mxd文档,点击“Open”。



8. 可以使用工具条上的放大,缩小,平移等工具浏览地图,使用Identity工具查看点击的要素的属性信息。



刚刚我们直接利用ArcObjects SDK提供的模板,无需任何代码就创建了一个简单的Engine程序,但是如果该模板不符合我们的需求,我们想自定义实现该界面该怎么做呢?不急,下面我们一步一步手动搭建一个类似的Engine应用程序

1. 从开始菜单中启动Visual Studio 2013,从“File”->“New”选中“Project”,在弹出的新建项目对话框中,首先选中Visual C#,然后在模板中选中Windows Forms Application,为该程序命名为“MapViewer”,然后通过点击“Browse”按钮,指定一个存放工程文件的路径,本示例放在“D:\Engine轻松入门”文件夹下面,点击“OK”。



2. 创建MapViewer工程后,该工程会自动创建一个名称为Form1的窗体。示例如下。



3. 在窗体上点击鼠标右键选择“属性”。



4. 在右边的属性列表中找到“Text”属性,输入“MapViewer”。窗体标题变化为“MapViewer”。



5. 拖动窗体右下角,使窗体变大,点击左侧的“工具箱”。



6. 在弹出的工具箱中找到“ArcGIS Windows Forms”选项卡,点击选项卡前面的三角,展开该选项卡,双击或者拖动“ToolBarControl”到窗体上。



7. 在MapViewer窗体界面上选中ToolBarControl控件,在属性窗口中找到“Dock”属性,点击下拉按钮,如下图选中“Top”部分。



8. 同理和ToolBarControl的操作一样,依次将TOCControl控件拖到窗体上,选中该控件,在属性窗口中找到“Dock”属性,选中“Left”部分。将MapControl控件的“Dock”属性,设为“Fill”。



9. 这时会发现在MapViewer窗体的控件上会显示需要初始化许可的提示,这时我们拖入LicenseControl控件,这些提示将会消失。效果如下图所示。



至此MapViewer窗体的界面布局设置已经完成。窗体顶部是工具栏,左侧是图层列表,主工作区是地图控件。

10. 这时我们需要在ToolBarControl上添加Engine提供的工具和命令。右键点击窗体上的ToolbarControl控件,选择“Properties”。



11. 在弹出的对话框中,先设置“Buddy Control”属性为axMapControl1,也就是说我们执行ToolBarControl上的工具时,是对MapControl进行操作的。然后点击“Items”选项卡。



12. 在“Items”选项卡中,点击“Add”按钮。



13. 该窗体中列出了所有Engine提供的,在ToolBarControl上可以直接加载使用的工具和命令,这里我们只使用部分工具。在左边的分类中选中“Generic”,双击右侧的“Open”命令。这样“Open”命令加入到工具栏里面了。



14. 在左侧依次选中“Map Inquiry”和“Map Navigation”,把“Identify”,“Zoom In”,“Zoom Out”等工具添加到工具栏中。



15. 添加完成后效果如下,可以拖动更改这些工具的顺序,点击“OK”按钮。



16. 在窗体上右键点击TOCControl,选择“Properties”菜单。设置“Buddy Control”属性为“axMapControl1”,也就是TOC图层列表中显示的是MapControl中的图层。点击“OK”。



17. 右键点击LicenseControl,点击“Properties”菜单。



18. 浏览弹出的对话框,其中ArcGIS Engine已经选中,如果需要其它扩展模块的许可,可以在右侧选中对应的复选框,点击“OK”按钮。



这里需要注意:左侧主许可是单选,如果选中了多个,则默认为第一个。由于下面Basic、Standard和Advanced许可是Desktop产品的许可,而LicenseControl控件只能在Engine产品下使用,所以使用LicenseControl控件无法初始化Basic、Standard和Advanced许可,但可以使用代码进行初始化。右侧扩展许可是可以多选的。一个程序只能初始化一次许可,或者使用LicenseControl控件,或者使用代码,代码初始化许可如下:
IAoInitialize m_AoInitialize = new AoInitializeClass(); esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
//初始化engineGeoDB许可
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
//检出扩展许可
licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
19. 在DEBUG菜单中点击Start Debugging选项,运行程序。



20. 这时会弹出一个错误“ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.”,提示我们需要使用Bind绑定ArcGIS产品。这是因为在ArcGIS 10.0版本开始,产品架构发生了一些变化,在开发的时候首先要做的就是绑定产品,绑定的位置放在使用ArcObjects对象之前,只需要添加如下代码:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)。



这里是绑定一个产品,即Engine程序调用哪个安装产品下的资源,绑定Engine,即调用Engine安装目录的资源,绑定Desktop,即调用Desktop安装目录下的资源,绑定EngineOrDesktop,即优先寻找机器上有没有安装Engine,有的话绑定Engine,没有再绑定Desktop。而LicenseControl控件是初始化许可,这两者一定要加以区别。

21. 通常在Program.cs的Main函数中对其进行绑定,写入: RuntimeManager.Bind(ProductCode.Engine); 之前需要添加ArcGIS引用,如using ESRI.ArcGIS;。



22. 再次运行程序,即可成功。点击工具栏上的“Open”按钮。



23. 在弹出的对话框中浏览到某个mxd文档,点击“Open”。



24. 地图文档中包含的图层就加载到了地图控件和图层列表控件中。



25. 点击工具栏上的identify工具,使用鼠标在地图上点击某个要素,弹出的Identify对话框中显示出了点击的要素的属性信息。



本教程各章节连接:
ArcGIS Engine入门教程_第一章_引言: http://zhihu.esrichina.com.cn/?/article/532
ArcGIS Engine入门教程_第二章_类库介绍: http://zhihu.esrichina.com.cn/?/article/533
ArcGIS Engine入门教程_第三章_软件安装: http://zhihu.esrichina.com.cn/?/article/534
ArcGIS Engine入门教程_第四章_创建Engine应用程序: http://zhihu.esrichina.com.cn/?/article/535
ArcGIS Engine入门教程_第五章_添加数据: http://zhihu.esrichina.com.cn/?/article/536
ArcGIS Engine入门教程_第六章_实现右键菜单: http://zhihu.esrichina.com.cn/?/article/537
 

5 个评论

为什么我加的 添加图层那个组件是灰色不能用
您是说Add Data工具是灰色的吗?是不是没有将ToolBarControl的“Buddy Control”属性设置为axMapControl1?
谢谢撒
为什么我添加了那句bind绑定了之后,还有那个错误出现的?
VS2019新建项目是不是不带MapControl的模板了?

要回复文章请先登录注册