牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记2

目录

一、ArcGIS Engine概述

1、 定义

2、 核心功能

3、 与ArcObjects(AO)的关系

二、开发环境搭建

1、 开发工具要求

2、 关键步骤

三、 ArcGIS Engine核心组件

1、 对象模型

2、 类库分类

四、 第一个AE应用程序(C#示例)

1、 开发步骤

五、 核心开发技巧

1、 对象创建方式

2、 事件处理

3、 资源释放

六、 注意事项


一、ArcGIS Engine概述

1、 定义

  • ArcGIS Engine(AE)是ESRI提供的GIS组件库,用于开发独立的GIS应用程序或功能扩展模块。

  • AE 是 ESRI 提供的一套基于 COM 的 GIS 开发组件库,用于构建轻量级桌面或嵌入式 GIS 应用。

  • 典型应用场景:国土规划、环境监测、交通管理等行业的定制化 GIS 工具开发。

2、 核心功能

  • 地图渲染:支持动态投影、多尺度符号化(如分级颜色、图表渲染)。

  • 数据兼容性:直接读写 Shapefile、File Geodatabase、ArcSDE 数据库,支持 WMS/WFS 服务。

  • 分析能力:提供空间叠加(Intersect/Union)、网络分析(最短路径)、3D 可视化基础功能。

3、 与ArcObjects(AO)的关系

  • 功能范围:AE 仅包含 AO 约 1/3 的接口,专注于基础 GIS 功能,缺少高级扩展模块(如 Spatial Analyst)。

  • 部署方式:AE 应用需绑定 Engine Runtime(约 500MB),无需安装 ArcGIS Desktop。


二、开发环境搭建

1、 开发工具要求

  • 开发环境:Visual Studio(C#/VB.NET)或 Java IDE。

  • 必要组件

    • ArcGIS Engine Developer Kit(SDK)

    • ArcGIS Engine Runtime(运行时环境)

    • License控件:AxLicenseControl(用于初始化许可)

2、 关键步骤

  • 安装顺序

    先安装Visual Studio,再安装ArcGIS Engine SDK和Runtime。

  • 项目引用

    添加ESRI相关COM组件引用(如ESRI.ArcGIS.CartoESRI.ArcGIS.Geometry等)。

  • 许可初始化

    在窗体中添加AxLicenseControl控件,或在代码中通过AoInitialize类初始化(需指定产品类型:Engine/Desktop)。


三、 ArcGIS Engine核心组件

1、 对象模型

  • 基于COM技术:遵循组件对象模型(Component Object Model),强调接口(Interface)与实现类的关系。

  • 重要接口

    • IMap: 管理地图图层和空间参考

    • ILayer: 图层基础操作

    • IFeatureClass: 要素类数据访问

    • IGeometry: 几何对象操作

    • IActiveView: 地图视图刷新

2、 类库分类

类库名称功能描述常用接口示例
Carto地图显示与图层管理IMapILayerIFeatureLayer
Geometry几何对象操作IPointIPolylineIPolygon
GeoDatabase地理数据库访问IFeatureClassIWorkspace
Controls地图控件与工具IMapControl2ITool
Display符号化与渲染ISymbolIRenderer

四、 第一个AE应用程序(C#示例)

1、 开发步骤

  • 创建Windows窗体项目

  • 添加MapControl控件

    拖放AxMapControl到窗体,设置Dock属性填充窗口。

  • 初始化许可

    使用AxLicenseControl或代码初始化:

    ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
    IAoInitialize aoInit = new AoInitializeClass();
    aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

加载地图文档

axMapControl1.LoadMxFile(@"C:\Data\Map.mxd");
axMapControl1.Refresh();


五、 核心开发技巧

1、 对象创建方式

  • 直接实例化new PointClass()

  • 接口查询IMap map = axMapControl1.Map as IMap;

2、 事件处理

  • 地图控件事件(如OnMouseDown)需实现IMapControlEvents2_Event接口。

3、 资源释放

  • 显式释放COM对象:Marshal.FinalReleaseComObject(obj);

  • 避免内存泄漏:及时释放地图、图层等大对象。


六、 注意事项

  1. 许可问题:未正确初始化Engine许可会导致控件无法使用。

  2. 版本兼容性:AE SDK版本需与Runtime版本一致。

  3. 线程安全:AE组件非线程安全,避免在非UI线程直接操作控件。

扩展学习建议

  • 官方资源:ESRI GitHub 上的 ArcGIS Engine Samples

  • 调试工具:使用 .NET Reflector 反编译 ESRI.ArcGIS.dll 查看接口定义。

如果需要某个知识点(如网络分析、自定义渲染器)的专项深入,可进一步说明!


以上为博主自己在学习过程中的学习笔记,用于学习和交流,欢迎大家批评纠正。

希望你越来越优秀!!

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

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

相关文章

端、管、云一体化原生安全架构 告别外挂式防护!

面对数字化转型浪潮,企业网络安全风险日益凸显。数据泄露、黑客勒索等事件频发,合规要求加速推进。尽管企业纷纷部署了防病毒、身份认证、文件加密、入侵防护、流量监控等多种安全系统,但分散且孤立的架构非但没有有效抵御风险,反…

深度学习--深度学习概念、框架以及构造

文章目录 一、深度学习1.什么是深度学习?2.特点3.神经网络构造1).单层神经元2)多层神经网络3)小结 4.感知器5.多层感知器6.多层感知器(偏置节点)7.神经网络构造 一、深度学习 1.什么是深度学习&#xff1f…

helm账号密码加密

1、安装工具 sudo apt update sudo apt install gnupg -y wget https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64 mv sops-v3.10.2.linux.amd64 /usr/local/bin/sops chmod x /usr/local/bin/sops2、生成加密文件 gpg --full-generate-…

大数据面试问答-HBase/ClickHouse

1. HBase 1.1 概念 HBase是构建在Hadoop HDFS之上的分布式NoSQL数据库,采用列式存储模型,支持海量数据的实时读写和随机访问。适用于高吞吐、低延迟的场景,如实时日志处理、在线交易等。 RowKey(行键) 定义&#xf…

动态渲染组件

React框架,JSX语法 今天遇到一个好玩的 常规的搜索列表,列表最后一列为操作列,删改查。 眼看着Table 操作列 的配置文件越来越复杂,决定把操作列单独写一个组件,代码瞬间靓仔了些 {title: Operation,dataIndex: oper…

Web APIs阶段

一、Web APIs和JS基础关联性 1.1JS的组成 1.2JS基础阶段以及Web APIs阶段 JS基础阶段:学习的是ECMAScript标准规定的基础语法 Web APIs阶段: Web APIs是W3C组织的标准Web APIs我们主要学习DOM和BOMWeb APIs是JS独有的部分主要学习页面交互功能需要使用…

Doip功能寻址走UDP协议

目前使用 connect()函数的UDP客户端 ,这里接收数据 解析的地方 查看一下。 如果使用 bind()、sendto()、recvfrom() 组合 那么返回值 和发送要在做调整,,根据业务需要后续在调整 其余的 和原来的 逻辑都是一样的,只是协议变了而已。 if serv…

Linux指令的详细介绍

前言:🌼🌼 Linux是一款强大且广泛使用的操作系统,命令行接口(CLI)是与其交互的核心方式。通过Linux指令,用户可以高效地执行文件管理、系统监控、进程控制等任务。虽然刚接触时可能感到有些复杂…

Elasticsearch使用记录

一、配环境 1.docker版本部署es 8.x系列可以关掉ssl(本地测试时),去docker的/usr/share/elasticsearch/config/elasticsearch.yml里面的“xpack.security.enabled:”设置成true就可以 2.window docker部署推荐教程:基于Docker安…

MuJoCo(Multi-Joint Dynamics with Contact)机器人仿真器存在的问题

MuJoCo物理引擎计算接触力的核心思路,是通过数学优化的方式同时满足多个物理约束,而不是简单地为每个碰撞点单独计算作用力。它的工作流程可以理解为几个阶段的紧密配合。首先,仿真器会快速检测所有可能发生接触的物体表面,筛选出…

基础(项目管理工具:JIRA、禅道)

目录 JIRA JIRA介绍 JIRA中的优先级(缺陷严重程度) JIRA中的解决结果(缺陷的解决结果) JIRA中的问题状态(缺陷的状态) 使用JIRA创建缺陷 JIRA的安装(Windows) JDK22的下载和安…

16.使用豆包将docker-compose的yaml转为k8s的yaml,安装各种无状态服务

文章目录 docker方式httpbinit-toolslinux-commandmyipreference docker-compose安装k8s方式 docker方式 httpbin A simple HTTP Request & Response Service https://httpbin.org/ https://github.com/postmanlabs/httpbin https://github.com/mccutchen/go-httpbin do…

Day(22)--网络编程习题

习题 以下是这些 TCP 通信练习题的 Java 代码实现及解析: TCP 通信练习 1 - 多发多收 客户端(Client1.java) java import java.io.IOException; import java.io.OutputStream; import java.net.Socket; ​ public class Client1 {public…

20、.NET SDK概述

.NET SDK(Software Development Kit) 是微软提供的一套开发工具包,用于构建、运行和管理基于 .NET 平台的应用程序。它包含了一组丰富的工具、库和运行时环境,支持开发者在多种操作系统(如 Windows、Linux 和 macOS&am…

DELL电脑开机进入自检界面

疑难解答 - 如何解决开机直接进入BIOS画面 添加链接描述 一、DELL电脑开机自检提示please run setup program 未设置一天中的时间-请运行安装程序(Time-of-day not set - please run SETUP program) 配置信息无效-请运行安装程序(Invalid configuration information - ple…

2025 最新版 Node.js 下载安装及环境配置详细教程【保姆级】

2025 最新版 Node.js 下载安装及环境配置详细教程【保姆级】 一、下载安装二、环境配置三、缓存配置、全局配置以及更换国内淘宝镜像源 一、下载安装 下载地址:Node.js 官方下载地址 双击安装,点击 Change 更改安装位置。我只有一个C盘,这里…

2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮

2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮 目录 2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮一、本周热点回顾1. 华为发布全球首…

vxe-table 动态列筛选,以及筛选项动态变化的解决方案记录

需求场景: table 的列是由接口动态返回的;列的筛选项就是数据的值,比如【姓名】这个字段总共有三个值,那么姓名这一列的筛选项就是这三个值本身;当有一列筛选后,其他列的筛选项也要动态变化。 vxe-table …

UE5游戏分辨率设置和窗口模式

第一种方法: 在项目配置Config文件夹下新建 DefaultGameUserSettings.ini 输入代码 [/Script/Engine.GameUserSettings] bUseVSyncFalse ResolutionSizeX1960 ResolutionSizeY1080 LastUserConfirmedResolutionSizeX800 LastUserConfirmedResolutionSizeY600 WindowPosX-1 …

链表知识回顾

类型:单链表,双链表、循环链表 存储:在内存中不是连续存储 删除操作:即让c的指针指向e即可,无需释放d,因为java中又内存回收机制 添加节点: 链表的构造函数 public class ListNode {// 结点…