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

目录

[一、ArcGIS Engine概述](#一、ArcGIS Engine概述)

[1、 定义](#1、 定义)

[2、 核心功能](#2、 核心功能)

[3、 与ArcObjects(AO)的关系](#3、 与ArcObjects(AO)的关系)

二、开发环境搭建

[1、 开发工具要求](#1、 开发工具要求)

[2、 关键步骤](#2、 关键步骤)

[三、 ArcGIS Engine核心组件](#三、 ArcGIS Engine核心组件)

[1、 对象模型](#1、 对象模型)

[2、 类库分类](#2、 类库分类)

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

[1、 开发步骤](#1、 开发步骤)

[五、 核心开发技巧](#五、 核心开发技巧)

[1、 对象创建方式](#1、 对象创建方式)

[2、 事件处理](#2、 事件处理)

[3、 资源释放](#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.Carto, ESRI.ArcGIS.Geometry等)。

  • 许可初始化:

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


三、 ArcGIS Engine核心组件

1、 对象模型

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

  • 重要接口:

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

    • ILayer: 图层基础操作

    • IFeatureClass: 要素类数据访问

    • IGeometry: 几何对象操作

    • IActiveView: 地图视图刷新

2、 类库分类

类库名称 功能描述 常用接口示例
Carto 地图显示与图层管理 IMap, ILayer, IFeatureLayer
Geometry 几何对象操作 IPoint, IPolyline, IPolygon
GeoDatabase 地理数据库访问 IFeatureClass, IWorkspace
Controls 地图控件与工具 IMapControl2, ITool
Display 符号化与渲染 ISymbol, IRenderer

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

1、 开发步骤

  • 创建Windows窗体项目

  • 添加MapControl控件

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

  • 初始化许可

    使用AxLicenseControl或代码初始化:

    cs 复制代码
    ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
    IAoInitialize aoInit = new AoInitializeClass();
    aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

加载地图文档

cs 复制代码
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 查看接口定义。

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


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

希望你越来越优秀!!

相关推荐
缘来是你远去是我1 天前
本地个人笔记exe
笔记
codeejun1 天前
每日一Go·MySQL-11、覆盖索引 & 回表原理
javascript·数据库·mysql
.痞老板.1 天前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦1 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
青梅味猪大肠1 天前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
FakeOccupational1 天前
【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置
笔记·stm32·实时音视频
迪康coolmu1 天前
企业U盘管控落地实战:基于迪康端点安全一体化管理系统的移动存储安全实践
运维·人工智能·经验分享·笔记·安全·电脑
用户298698530141 天前
React 前端将 Excel 工作表导出为图片的技术实践
javascript·react.js·excel
starzy19901 天前
深入理解Scala可变Map:动态构建场景下的性能与设计权衡
开发语言·scala
zhanghaha13141 天前
C# 系列教程_7 判断语句(分支)保姆级精讲
开发语言·c#