ArcObjects SDK开发 002 写第一个ArcObjects SDK程序
1、开发环境
基于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的组合进行开发。
2、准备工作
安装Visual Studio社区版,社区版是免费的,也足够我们使用,目前最新版本是2022,建议安装最新的版本即可。
安装ArcGIS桌面软件即ArcMap,建议安装最新的10.8版本,也是ArcMap的最后版本。以后ArcGIS的桌面软件就是ArcGIS Pro了。
安装和ArcMap版本一致的ArcObjects SDK。
软件开发的UI建议选择WPF,建议使用第三方UI库DEV。
3、新建工程
打开Visual Studio,点击创建新项目,选择WPF应用(.Net Framework),点击下一步,设置项目名称、位置、解决方案名称等信息,框架建议选择.Net Framework 4.8,这也是.Net Framework的最后一个版本,以后都是.Net 6.0、7.0了。

点击创建按钮完成创建。完成后,我们把常用的一些dll文件都引用到工程下。 如下图所示。

点击引用项,在属性页设置其嵌入互操作类型为False,如下图所示。

4、开始写代码
因为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做一个业务应用系统还差的很远。
ArcObjects SDK开发 002 写第一个ArcObjects SDK程序的更多相关文章
- 开发你的第一个BLE应用程序—Blinky
本文将和大家一起编写我们的第一个BLE应用程序:Blinky(闪灯程序),哪怕你之前没有任何BLE开发经验,也不用担心,只要跟着文中所述步骤,你就可以一步步搭建自己的第一个BLE应用程序.通过这个Bl ...
- 用Racket语言写了一个万花筒的程序
用Racket语言写了一个万花筒的程序 来源:https://blog.csdn.net/chinazhangyong/article/details/79362394 https://github. ...
- 基于Unity的AR开发初探:第一个AR应用程序
记得2014年曾经写过一个Unity3D的游戏开发初探系列,收获了很多好评和鼓励,不过自那之后再也没有用过Unity,因为没有相关的需求让我能用到.目前公司有一个App开发的需求,想要融合一下AR到A ...
- FFmpeg SDK开发模型之中的一个:解码器
简单介绍 本例解说了怎样使用ffmpeg SDK解码媒体文件: 參考源代码是ffmpeg 自带的apiexample.c 一.源代码#include <stdlib.h>#include ...
- [maven学习笔记]第一节,认识maven,搭建maven开发环境,写第一个HelloWorld
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40142771 maven官网:http://maven.apache.org/ 学习视 ...
- android 串口开发第一篇:搭建ndk开发环境以及第一个jni调用程序
一:ndk环境搭建 1:开发环境 我使用的是android studio 2.3.3版本,搭建ndk开发环境比较简单,打开File----Settings----Appearance&Beha ...
- 02-编写第一个C语言程序
本文目录 1.打开Xcode,新建Xcode项目 2.选择最简单的命令行项目 3.输入项目信息 4.选择一个用来存放C程序代码的文件夹 5.运行项目 说明:这个C语言专题,是学习iOS开发的前奏.也为 ...
- 在Seismic.NET下用最少的语句写出一个剖面显示程序
用Seismic.NET开发地震剖面显示程序可以节省大量的时间,下面的代码展开了如何用最少的代码显示一个SEGY文件. // 用一行语句把 reader, pipeline, view 和 plot ...
- 基于C#的钉钉SDK开发(1)--对官方SDK的重构优化
在前段时间,接触一个很喜欢钉钉并且已在内部场景广泛使用钉钉进行工厂内部管理的客户,如钉钉考勤.日常审批.钉钉投影.钉钉门禁等等方面,才体会到原来钉钉已经已经在企业上可以用的很广泛的,因此回过头来学习研 ...
- 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)
https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...
随机推荐
- 导出DNS服务器上的记录
近日遇到一个需求,需要将DNS服务器上的所有记录都导出. 试了一下,如果从DNS管理单元里直接选择导出列表,那么子域的DNS记录是不会被导出的.这样显然不行,需要寻找其它方法.本来想用Export-D ...
- kvm里的虚拟机硬盘和网卡使用virtio驱动
1.首先从虚拟机的xml文件中找到已经使用virtio驱动的硬件,复制里面的address这行参数出来 <address type='pci' domain='0x0000' bus='0x00 ...
- Kubernetes(k8s)为容器设置启动时要执行的命令和参数
创建 Pod 时设置命令及参数 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数.如果要设置命令,就填写在配置文件的 command 字段下,如果要设置命令的参数,就填写在配置文件的 ...
- 4_Spring
一. Spring Spring的基本组成: 1.最完善的轻量级核心框架. 2.通用的事务管理抽象层. 3.JDBC抽象层. 4.集成了Toplink, Hibernate, JDO, and iBA ...
- count(*), count(1), count(列名)的区别
1.从结果上来看 count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值. 2.从执行 ...
- POJ2823 滑动窗口 (单调队列)
来学习一下单调队列: 他只可以从队尾入队,但可以从队尾或队首出队,来维护队列的单调性.单调队列有两种单调性:元素的值单调和元素的下标单调. 单调队列可以用来优化DP.状态转移方程形如dp[i]=min ...
- gets,fgets,puts,fputs,scanf,printf的作用,联系和区别
转载: https://blog.csdn.net/lc10915819/article/details/12747943
- Selenium+Python系列(三) - 常见浏览器操作
写在前面 上篇文章为大家分享了自动化测试中,常见元素定位的操作. 今天再次读文章,居然忘记了大家特别喜欢的CSS和Xpath定位操作分享,这怎么能行呢? 马上安利,感兴趣的同学去参考下面链接: CSS ...
- day51-正则表达式02
正则表达式02 5.4正则表达式语法02 5.4.6捕获分组 详见5.3.3 例子 package li.regexp; import java.util.regex.Matcher; import ...
- 小米MIUI禁止系统更新
删除downloaded_rom的文件夹,随便找一个文件(文件,不是文件夹),重名为downloaded_rom(是把一个文件重命名),这样系统后台偷偷下载时,就不知道该存放更新包的文件,就无法偷偷更 ...