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源码里面别人写的 ...
随机推荐
- 启动elasticsearch报错解决
说不定以后会不定期更新该文档 1.提示文件描述符数量太少,修改/etc/security/limits.conf文件,添加. * soft nofile 65537 * hard nofile 655 ...
- 分布式文件存储 CephFS的应用场景
块存储 (适合单客户端使用) 典型设备:磁盘阵列,硬盘. 使用场景: a. docker容器.虚拟机远程挂载磁盘存储分配. b. 日志存储. 文件存储 (适合多客户端有目录结构) 典型设备:FTP.N ...
- 论文解读(FedGAT)《Federated Graph Attention Network for Rumor Detection》
论文信息 论文标题:Federated Graph Attention Network for Rumor Detection论文作者:Huidong Wang, Chuanzheng Bai, Ji ...
- PAT (Basic Level) Practice 1026 程序运行时间 分数 15
要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 clock ...
- 原生js的懒人轮播图
<style> body{ margin: 0; padding: 0px;}#carousel{ margin: auto; /* 居中 */ width: 600px; /* 设置宽度 ...
- Go实现优雅关机与平滑重启
前言 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式.而执行Ctrl+C关闭服务端时,会强制结束进程导致正在访问的请求出 ...
- Codeforces Round #709 Div2
就ac了一题.QAQ掉分了我好难过. A题要画图推出来公式. B不会,现在没看到好懂得题解. C题,思路错了,给一些数,每天只能选其中一些,每个数不能被选超过k次,应该先将每天只能选一个得这个数先选上 ...
- 面向对象的照妖镜——UML类图绘制指南
1.前言 感受 在刚接触软件开发工作的时候,每次接到新需求,在分析需求后的第一件事情,就是火急火燎的打开数据库(DBMS),开始进行数据表的创建工作.然而这种方式,总是会让我在编码过程中出现实体类设计 ...
- DDD-领域驱动(二)-贫血模型与充血模型
贫血模型 一般来说 贫血模型:**一个类中只有属性或者成员变量,没有方法 **!例如 DbFirst 从数据库同步实体过来, -- 对于一个系统刚开始的时候会觉得这时候是最舒服的,但是如果后期系统需要 ...
- Containerd-1.6.5 镜像容器操作
一.Containerd 镜像操作 1 基本参数 [root@ecs-65685 ~]# ctr c NAME: ctr containers - manage containers USAGE: c ...