(适合GIS开发入门者,通俗解析核心知识点)
目录
[一、ArcGIS Engine是什么?](#一、ArcGIS Engine是什么?)
[二、ArcGIS Engine能做什么?](#二、ArcGIS Engine能做什么?)
[三、ArcGIS Engine与ArcObjects的区别](#三、ArcGIS Engine与ArcObjects的区别)
[六、案例:基于ArcGIS Engine的简易地图查看器开发](#六、案例:基于ArcGIS Engine的简易地图查看器开发)
[1. 案例背景](#1. 案例背景)
[2. 开发环境与工具](#2. 开发环境与工具)
[3. 实现步骤](#3. 实现步骤)
[Step 1:环境配置](#Step 1:环境配置)
[Step 2:加载地图数据](#Step 2:加载地图数据)
[Step 3:添加基础工具](#Step 3:添加基础工具)
[Step 4:实现属性查询功能](#Step 4:实现属性查询功能)
[4. 运行演示](#4. 运行演示)
[5. 注意事项](#5. 注意事项)
[6. 扩展思考](#6. 扩展思考)
一、ArcGIS Engine是什么?
ArcGIS Engine(简称AE)是Esri公司提供的一套基于COM组件技术的GIS开发工具包,支持C#、Java、VB.NET等多种编程语言。它的核心价值在于:
- 独立开发:无需安装ArcGIS Desktop,可直接构建独立GIS应用程序。
- 功能嵌入:能将GIS功能(如地图显示、空间分析)集成到Word、Excel等非GIS软件中。
- 组件化设计:通过控件(如MapControl、ToolbarControl)和类库实现灵活开发。
核心组成:
- 开发工具包(Developer Kit):包含控件、类库、示例代码和文档。

(开发工具包组成示意图)
- 运行时(Runtime):应用程序运行的基础环境,需根据功能需求选择不同授权级别。
二、ArcGIS Engine能做什么?
AE封装了丰富的GIS功能,覆盖以下常见场景:
- 基础操作:地图缩放、平移、图层管理。
- 数据查询:属性查询、空间查询(如点击地图获取要素信息)。
- 数据分析:网络分析(最短路径)、空间统计、三维可视化。
- 数据编辑:矢量数据增删改、拓扑检查。
- 专题制图:生成分级符号图、热力图等专题地图。
三、ArcGIS Engine与ArcObjects的区别
两者功能相似,但定位不同:
对比项 | ArcGIS Engine | ArcObjects |
---|---|---|
开发依赖 | 无需ArcGIS Desktop,独立开发 | 需安装ArcGIS Desktop |
功能范围 | 核心功能(无部分UI工具) | 包含ArcGIS Desktop完整功能 |
应用场景 | 轻量化独立程序、功能嵌入 | 深度定制ArcGIS桌面扩展 |
示例 | 缺少IGxDialog(数据对话框) | 支持更多桌面交互接口 |
四、开发资源与学习路径
-
官方文档 :安装AE后,通过
ArcObjects Help for .NET
查看接口说明和示例。 -
自带示例 :安装目录下的
Samples
文件夹包含经典代码(如地图渲染、工具开发)。 -
在线资源:
- Esri开发者社区:技术文档和论坛答疑。
- GitHub开源项目:参考成熟项目结构。
4. 控件速览:
- MapControl:地图显示与交互。
- ToolbarControl:集成地图工具(如放大、查询)。
- TOCControl:管理图层目录。

五、对象模型图(OMD)入门
OMD图用于描述ArcGIS Engine中类的继承、组合等关系,是理解组件架构的关键工具:
- 类类型:
- 抽象类(Abstract Class) :不能直接实例化(如
Geometry
)。 - 组件类(CoClass) :可直接创建对象(如
QueryFilter
)。 - 普通类(Class) :需通过其他类实例化(如
Workspace
通过WorkspaceFactory
创建)。
2. 类关系:
- 继承 :子类扩展父类功能(如
Polyline
继承Geometry
)。

- 组合 :对象生命周期绑定(如
Map
包含Layer
,删除地图则图层消失)。

- 关联 :对象间松散引用(如
Map
与Legend
的关系)。

- **依赖:**一个对象产生另一个对象的方式(如Create、open等)
六、案例:基于ArcGIS Engine的简易地图查看器开发
(实现地图加载、缩放、平移、属性查询基础功能)
1. 案例背景
假设我们需要为某环保部门开发一个简易GIS工具,用于快速查看区域污染源分布地图,并支持点击查询污染源属性信息。通过此案例,学习如何利用ArcGIS Engine的MapControl
和ToolbarControl
控件搭建基础地图应用。
2. 开发环境与工具
-
开发语言:C#(WinForm)
-
工具:Visual Studio 2019 + ArcGIS Engine 10.2
-
数据:Shapefile格式的污染源点数据(包含名称、类型、浓度等字段)
3. 实现步骤
Step 1:环境配置
-
安装ArcGIS Engine Runtime和SDK。
-
在Visual Studio中新建Windows窗体项目,添加AE的COM组件引用(
ESRI.ArcGIS.Carto
,ESRI.ArcGIS.Controls
等)。 -
将
MapControl
和ToolbarControl
拖入窗体,并绑定ToolbarControl
的伙伴控件为MapControl
。
Step 2:加载地图数据
cs
// 在窗体加载事件中添加代码
private void MainForm_Load(object sender, EventArgs e)
{
// 设置地图控件的坐标系(以WGS84为例)
mapControl1.SpatialReference = new SpatialReferenceEnvironment().CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
// 加载Shapefile数据
IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
IFeatureLayer featureLayer = new FeatureLayerClass();
IWorkspace workspace = workspaceFactory.OpenFromFile(@"D:\PollutionData\", 0);
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass("PollutionSources.shp");
featureLayer.Name = "污染源分布";
// 将图层添加到地图控件
mapControl1.AddLayer(featureLayer);
mapControl1.Refresh();
}
Step 3:添加基础工具
通过ToolbarControl
绑定AE内置命令,快速实现地图交互:
cs
// 在窗体初始化时添加工具按钮
private void InitializeToolbar()
{
// 添加放大、缩小、平移、全图工具
toolbarControl1.AddItem("esriControls.ControlsMapZoomInTool");
toolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool");
toolbarControl1.AddItem("esriControls.ControlsMapPanTool");
toolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand");
}
Step 4:实现属性查询功能
通过MapControl
的点击事件,获取点击位置的要素属性:
cs
private void mapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
// 定义查询参数
IFeatureLayer featureLayer = mapControl1.get_Layer(0) as IFeatureLayer;
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = mapControl1.ToMapPoint(e.x, e.y); // 将屏幕坐标转为地图坐标
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
// 执行查询
IFeatureCursor featureCursor = featureLayer.Search(spatialFilter, false);
IFeature feature = featureCursor.NextFeature();
if (feature != null)
{
// 弹出属性信息(例如名称、浓度)
string message = $"污染源名称:{feature.get_Value(1)}\n浓度值:{feature.get_Value(3)}";
MessageBox.Show(message);
}
}
4. 运行演示
-
地图加载 :污染源点数据以默认符号显示在
MapControl
中。 -
交互操作:通过工具栏按钮实现缩放、平移。
-
属性查询:点击任意污染源点,弹出属性对话框。
5. 注意事项
-
数据路径问题:需确保Shapefile路径正确,且文件未被占用。
-
控件初始化顺序 :需先绑定
ToolbarControl
和MapControl
,再添加工具。 -
异常处理 :添加
try-catch
块避免因数据加载失败导致程序崩溃。
6. 扩展思考
-
添加更多工具:如绘制缓冲区、空间查询(统计某区域内的污染源数量)。
-
优化显示 :根据浓度值分级渲染颜色(使用
IFeatureRenderer
接口)。
总结:通过此案例,可以快速掌握ArcGIS Engine开发的基本流程(控件使用、数据加载、事件交互),为后续复杂功能开发奠定基础。建议读者尝试修改代码参数(如查询字段、符号样式),观察不同效果!
参考:牟乃夏ArcEngine教程:第1章 ArcGIS Engine编程基(22页)-原创力文档
牟乃夏ArcEngine教程ArcGISEngine编程基.pptx - 人人文库(学习笔记完,可结合代码实操加深理解!)
以上为博主自己在学习过程中的学习笔记,用于学习和交流,欢迎大家批评纠正。
希望你越来越优秀!!