ArcObjects SDK 002 写第一个ArcObjects SDK程序
基于ArcObjects SDK开发,开发环境一般选用Visual Studio,开发语言使用C#,开发包使用ArcObjects SDK for .Net。UI有的使用Winform,也可以使用WPF。调用的时候,不关心接口或类是否可以在ArcEngine Runtine下运行,验证的时候,也是按照Desktop环境验证,开发的软件直接在ArcGIS Desktop环境下运行。
一般情况下,我使用Visual Studio+ArcObjects SDK for .Net+C#+WPF+ArcGIS Desktop的组合进行开发。
安装Visual Studio社区版,社区版是免费的,也足够我们使用,目前最新版本是2022,建议安装最新的版本即可。
安装ArcGIS桌面软件即ArcMap,建议安装最新的10.8版本,也是ArcMap的最后版本。以后ArcGIS的桌面软件就是ArcGIS Pro了。
打开Visual Studio,点击创建新项目,选择WPF应用(.Net Framework),点击下一步,设置项目名称、位置、解决方案名称等信息,框架建议选择.Net Framework 4.8,这也是.Net Framework的最后一个版本,以后都是.Net 6.0、7.0了。
点击创建按钮完成创建。完成后,我们把常用的一些dll文件都引用到工程下。 如下图所示。
点击引用项,在属性页设置其嵌入互操作类型为False,如下图所示。
因为ArcObjects SDK是基于WinForm的,而我们又是用WPF开发,所以我们需要在窗体上加一个WindowsFormsHost,然后把初始化后的AxMapControl添加到WindowsFormsHost。组织带AxMapControl的系统主界面流程一般如下。
1、绑定Runtime,这里可以选择绑定Desktop或者Engine,我们一般会绑定Desktop,但则就要求当前机器必须安装ArcGIS桌面软件,不然绑定代码会报错。代码如下:
RuntimeManager.Bind(ProductCode.Desktop);
2、验证许可,我们调用ArcObjects SDK里面的IAoInitialize接口验证许可。
IAoInitialize myAoInitialize = new AoInitializeClass(); myAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
3、初始化AxMapControl。我们在这里就不直接拖控件了,而是使用代码生成。
AxMapControl myAxMapControl = new AxMapControl(); myAxMapControl.BeginInit(); this.UI_Map_WindowsFormsHost.Child = myAxMapControl; myAxMapControl.EndInit(); myAxMapControl.BackColor = System.Drawing.Color.White; myAxMapControl.BorderStyle = esriControlsBorderStyle.esriNoBorder; myAxMapControl.ShowScrollbars = false;
4、可以加一段测试代码,例如点击一个按钮,加载指定的地图文件。
myAxMapControl.LoadMxFile("E:\\A.mxd");
到此为止,一个Hello Word版本的ArcObjects SDK程序就创建起来了。但距我们使用ArcObjects SDK做一个业务应用系统还差的很远。