ArcEngine二次开发0——入门(下载 部署 组件学习)

news2024/9/21 20:43:16

折腾一下ArcGIS Engine二次开发。

目录

      • 1、开发环境配置
      • 2、部署一个ArcGIS Engine应用程序
      • 3、ArcObject组件学习
      • 4、报错及解决
      • 4、其他

1、开发环境配置

参考:https://blog.csdn.net/H48662654/article/details/113384150
(使用ArcEngine前,先要安装对应版本的ArcGIS Desktop桌面版软件,同时,AE也有对应的VisualStudio版本,不过一般可以通过修改注册表来解决。)

基于 AE10.4+VS2019 的C# 开发环境搭建步骤:

  1. 安装Visual Studio 2019
  2. 安装ArcGIS Desktop 10.4(或者ArcGIS Engine Runtime)
  3. 安装ArcGIS_Engine_Windows_1041
  4. 安装ArcObjects_SDK_for_NET_Framework_1041(安装前修改注册表 位置:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio的新建项12.0)

2、部署一个ArcGIS Engine应用程序

  • 打开VS2019,语言选择C#,找到并选择MapControl Application项目→“下一步”,建立一个基于ArcGIS Engine的二维地图显示应用程序。
    在这里插入图片描述
  • 开发环境中的MapControl Application项目:

在这里插入图片描述

  • MapControl Application应用程序运行界面:

在这里插入图片描述

3、ArcObject组件学习

ArcObjects 包括构建 ArcGIS 产品 ArcView 、 ArcEditor 、 Arclnfo 和 ArcGIS Server 的所有核心组件。使用 ArcObjects 可以创建独立界面版本( stand - alone )的应用程序,或者对现有的应用程序进行扩展,为GIS和非GIS用户提供专门的空间解决方案。 ArcObjects 同时也提供了 COM 、.NET 和 C++的应用程序编程接口(API)。这些编程接口不仅包括了详细的文档,还包括一系列高层次的组件,使得临时的编程人员也能够轻易地创建 AreGIS 应用程序。

ArcGIS Engine 是 ArcObjects 组件跨平台应用的核心集合,它提供多种开发的接口。 ArcGIS Engine 可用来建立广泛的 GIS 应用,并在应用中嵌人GIS功能。
ArcGIS Engine 可以有以下几个使用方式:
(1)在应用程序中嵌入 GIS 逻辑;
(2)构建和配置 GIS 应用程序;
(3)在其他应用程序中嵌入 GIS 控件和地图对象;
(4)用 C++ 或 Java 建立跨平台的应用。

…\DeveloperKit10.4\Diagrams目录,有ObjectModel的PDF文件,记录的是ArcObjects的对象模型图(OMD),我们可以通过阅读对象模型图来了解各个类的类型及其之间的关系、接口的属性与方法。

对象模型图(Object Model Diagrams):
1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性
6. 是否有其他类也支持该接口;
7. 对象间的关系

在这里插入图片描述
https://www.cnblogs.com/liuliang1999/p/10746622.html
图源:https://www.cnblogs.com/liuliang1999/p/10746622.html

类与对象:抽象类、组件类、普通类
 Abstract Class抽象类:不能直接创建新对象,只是用来派生ArcObjects其他类;抽象类用于定义子类的公共接口,子类继承其定义的接口,OMD中每个抽象类至少有一个子类。
 Coclass组件类或可创建类:用new关键字创建对象或者从别的对象获得运行实例。例如:IMap pMap=new MapClass();
 Class普通类或实例化类:不能直接创建新对象,但能从别的对象的属性或其他类的方法获得实例创建。例如:IWorkspaceFactory pWF = new ShapefileWorkspaceFactoryClass();
IWorkspace pWS = pWF.OpenFromFile(sWorkspacePath,0);

(A和B为普通类对象,C为一个组件类对象,D为一个普通类,A=new D()这种是错误的,A=B.method()和A=C.method()这种创建对象的方法是正确的。)


https://www.pianshen.com/article/14421148720/
图源:https://www.pianshen.com/article/14421148720/

类与类之间的关系:
 Instantiation依赖关系:一个对象有方法产生另一个对象。前者的周期决定后者的生命周期,即实例化。
 Association关联关系:关联关系有方向性:单向关联和双向关联。
 Compsition组合关系:此种方式下,“整体”对象控制着“部分”对象的生存时间。
 Inheritance继承关系:类间的继承是类功能的扩展,父亲具有的任何属性与方法,子类同样具备,且子类在保存父类的属性与行为的基础上增加了自己持有的行为与属性 。

4、报错及解决

运行报错解决:
在程序入口Program.cs添加如下代码
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

读取shape报错解决:
IAoInitialize m_aoinitialize = new AoInitialize();
m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

namespace AppGIS
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//用于运行时报错
            IAoInitialize m_aoinitialize = new AoInitialize(); m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);//用于读取shapefile时报错invalid
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

无法嵌入互操作类型AOIBookmarkClass()报错解决:
在属性面板中,我们找到嵌入互操作类型的选项,默认是TRUE,这里我们选择False。
选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。
这样做的原因:
1.”嵌入互操作类型”中的嵌入就是引进、导入的意思,类似于c#中using,c中include的作用,目的是告诉编译器是否要把互操作类型引入。
2.“互操作类型”实际是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口等。
3.“嵌入互操作类型”设定为true,实际上就是不引入互操作集(编译时候放弃Com程序集),仅编译用户代码的程序集。
而设定为false的话,实际就是需要从互操作程序集中获取 COM 类型的类型信息。
【详细信息参考http://www.cnblogs.com/pnljs/archive/2012/02/20/2359313.html】

4、其他

学会看AO组件的对象模型图,就可以很快找到各个功能类库对应的方法函数及属性参数,参考一些学习教程,就可以入门AE开发了。

工具箱中的控件:
在这里插入图片描述

添加引用:
在这里插入图片描述
在这里插入图片描述

开发环境配置参考:https://blog.csdn.net/H48662654/article/details/113384150
开发环境配置教程

由于ArcGIS、ArcEngine以及承载开发环境的Visual
Studio的版本众多,其开发环境的配置也有不小的难度,故写此文章写给新入门ArcGIS二次开发的同学,帮助他们摆平入门的第一道坎。

进行ArcGIS二次开发有很多种方式,比如现在主流的Python、AE+C#等。如题,这里说的是AE+C#开发的第一步,开发环境的配置。对进一步开发有兴趣的朋友可以去看我的CSDN博客

  1. 既然是ArcGIS的开发,首先我们要有ArcGIS吧。那就安装ArcGIS
    Desktop,版本有很多,最广泛使用的是10.2版本,10.4也行。ArcGIS10.4.1 百度网盘下载 提取码:0479
    ArcGIS安装教程

  2. 然后是ArcEngine和ArcObject的安装, ArcEngine+ArcObject+破解文件10.4.1 百度网盘 提取码:z1qx

着重说明:ArcEngine和VS版本是有对应的(ArcEngine和ArcDesktop的版本必须一致)。一般来说,VS2010和2012对应ArcEngine10.2,VS2013对应ArcEngine10.4,错误的版本可能会导致不可预知的错误。下面会讲述如何破除这个限制。(当然,最好就是用规定的配置,有模板,授权和添加引用也很方便)

下载文件后,双击运行ArcGIS_Engine_Windows_1041_152027.exe ,选择文件解压目录,注意这是解压目录,解
压后再选择Setup.exe安装,选择完全安装以及安装目录,C盘有条件就直接安装。
在这里插入图片描述

再双击运行ArcObjects_SDK_for_NET_Framework_1041_151832.exe,同上。如过出现报错,不能安装,是因为ArcGIS版本检测到没有安装Visual Studio2019的缘故,解决方法如下。

在这里插入图片描述

(1)打开注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio

(2)新建项12.0(如果没有),新建两个字符串值,并写入值,如下:

InstallDir C:\Program Files (x86)\Microsoft Visual Studio
12.0\Common7\IDE\

ShellFolder C:\Program Files (x86)\Microsoft Visual Studio 12.0\

(3)重新安装
在这里插入图片描述

安装完成后需破解,跟Desktop一样

将破解文件夹中的AfCore.dll,替换到ArcEngine安装目录的bin文件夹下覆盖原文件。

在这里插入图片描述

这样就基本完成。
3. 接下来是VS的一些配置问题

打开VS后,创建新的Windows窗体应用程序,在工具箱中右键==>添加选项卡==>取名ArcGIS,在新建的选项卡里,再右键,选择“选择项”,弹窗中,选择.NET
Framework组件,选择需要添加的arcgis组件,打勾即可

在这里插入图片描述

再说一个代码权限的问题,

//基本权限,一定要的
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
IAoInitialize m_aoinitialize = new AoInitializeClass();
m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
//扩展权限,需要用到什么扩展,就授权哪个,在License控件属性需勾选对应的项
m_aoinitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);

LicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现SO-ELM蛇群算法优化极限学习机时间序列预测 1.data为单变量时间…

拿捏指针(三)--- 对指针的高级认识(高级)

函数指针 函数指针的定义 通过对 对指针的基本认识 和 对指针的进阶认识 我们知道&#xff0c;整型指针是指向整型的指针&#xff0c;数组指针是指向数组的指针&#xff0c;其实&#xff0c;函数指针就是指向函数的指针。 和学习数组指针一样&#xff0c;学习函数指针我们也需…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…

【Linux】进程优先级

目录 进程优先级什么叫做优先级&#xff1f;Linux优先级更改优先级 进程优先级 什么叫做优先级&#xff1f; cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近&#xff0c;被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上&#xff0c;一名中国“狂热少年”冲进球场&#xff0c;成功拥抱了梅西&#xff0c;甚至摆出了拍照姿势。拥抱后在球场狂奔&#xff0c;还有大马丁击了掌&#xff0c;最后…

C++学习之STL vector

Vector是什么&#xff1f; 问chatgpt看看是什么回答&#xff1f; ChatGPT&#xff1a; C中的vector是标准库&#xff08;STL&#xff09;提供的一种动态数组容器。它能够在运行时根据需要自动调整大小&#xff0c;并且可以存储不同类型的元素。 使用vector&#xff0c;您可…

Java虚拟机——HotSpot的算法实现细节

根节点枚举 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。固定可作为GC Roots的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;栈帧的本地变量表&#xff09;中。当Java应用很大的时候&#xff0c;类和常量数量很多…

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串&#xff1b;3.4.2 双端队列 &#xff08;链表&#xff09; list &#xff1a;有序&#xff08;插入有序&#xff09;&#xff1b;3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中&#xff0c;首先看到的是dubbo的集群容错模式&#xff0c;以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义&#xff0c;就是可用性优先&#xff0c;遍历所有的invokers&#xff0c;选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行&#xff0c;攻击者通常会控制网络中许多终端或服务器&#xff0c;这些终端或服务器同时向被攻击目标发送大量的请求&#xff0c;被攻击目标无法判断这些请求来源的合法性&#xff0c;因此会无法正常处理这些请求&#xff0c;而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee&#xff08;蒂姆伯纳斯李&#xff09; (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符&#xff08;器&am…

Fiddler如何比较两个接口请求?

进行APP测试时&#xff0c;往往会出现Android和iOS端同一请求&#xff0c;但执行结果不同&#xff0c;这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…

【计网】第一章 计算机网络概述

文章目录 计算机网络概述一、计算机网络在信息时代中的作用二、互联网概述2.1 互连网概念2.2 网络的网络2.3 互连网基础结构发展的三个阶段2.4 互连网的标准化工作 三、互联网的组成3.1 互联网的边缘部分3.2 互联网的核心部分3.2.1 基础概念3.2.2 电路交换3.2.3 报文交换3.2.4 …

全网最全的以太坊ERC4626协议解析-ERC4626 - yield-bearing vaults

收益性存款 ERC4626 协议是一种用于代币化保险库的标准&#xff0c;它可以优化和统一收益保险库的技术参数。收益保险库是指使用不同策略来为用户提供最佳收益的合约&#xff0c;例如借贷市场、聚合器或本身具有利息的代币。ERC4626 协议提供了一个标准的 API&#xff0c;用于表…

html实现好看的个人介绍,个人主页模板5(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的介绍界面1.3 我的能力界面1.4 项目案例界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.3 源代码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13127331…

DJ4-4 CIDR、DHCP

目录 一、分类 IP 方法的问题 二、CIDR 1、CIDR 定义 2、CIDR 地址划分 三、DHCP 1、DHCP 概述 2、DHCP 工作过程 3、DHCP&#xff1a;C/S 场景 4、DHCP&#xff1a;不仅获得 IP 地址 四、组织机构获取 IP 地址 一、分类 IP 方法的问题 A 类的 IP 地址&#xff0c;有…

一天学完Java,主要记录difference

Java学习记录 Java中的内存区域划分Java中的包&#xff08;package&#xff09;Java中的枚举&#xff08;Enum&#xff09;Java中的包装类Java中的Math数学计算类Java中的Random&UUIDJava中的format数字格式化Java中字符串和数字的转换Java中的高精度计算Java中的String操作…