ArcGIS_Engine二次开发——基础篇

合集下载

ArcGIS二次开发

ArcGIS二次开发

第一章z开发基础1.1组件对象模型在明确讨论COM之前,有必要先一般性地思考一下软件组件使用的广泛性。

在软件组件背后有许多的驱使因素,但最基本的就是软件开发是个昂贵和耗时的风险行为。

在理想的世界里,假如曾经写了一段代码,然后通过不同的开发工具一次一次的反复使用它,这种情况是可能的,即便是在最初的开发者不能预见的环境下也能使用。

理想情况下,对最初开发者生成的函数功能的改变能在不需要目前用户改变和重编译他们的代码情况下实现。

早期重用代码块的尝试就是创建类库的进展,这些类库通常用C++开发。

早期的尝试有很多的限制,较为明显的是:共享系统组件的困难(共享二进制C++组件是非常困难的——大部分的尝试是共享源代码);不重新编译就很难保存和更新C++组件的问题;缺乏好的建模语言和工具以及属性接口和定制工具。

为了解决这样那样的一些问题,许多软件工程师开始采用基于组件的方法进行系统开发。

一个软件组件就是一个可重用代码的二进制单元。

已经出现了几个不同但相互重叠的开发和共享组件标准。

微软的COM已成为建立交互式桌面应用程序事实上的标准。

在互联网上,JavaBean是可行的技术。

对象管理组(OMG)制定了粗粒度层次上适用于应用程序互操作的公用对象请求代理架构(CORBA)。

为了理解COM(以及所有基于COM的技术),认识到其不是一种面向对象语言而是一个协议或标准是非常重要的。

COM不仅仅是一种技术,还是软件开发的一种方法论。

COM定义了一种连接软件组件或模型的协议。

通过使用这种协议,可以建立能在分布式系统中动态交互的可重用软件组件。

COM还定义了一种称作基于接口的编程模式。

对象封装了能体现定义良好的接口后每个实例化对象特征的操作方法和数据。

这增强了系统开发的结构化和安全性,因为一个对象的客户并不知道某个特定方法如何实现的任何细节。

COM不规定应如何构建一个应用程序。

语言、结构和实现细节都由使用COM的应用程序开发人员决定。

ArcEngine二次开发入门介绍

ArcEngine二次开发入门介绍

ArcObjects OMD图表上的虫洞
概念上,这是一个对象模型 事实上, 被分别在几张图表里存放
虫洞表现了图表与图表间的连接关系
虫洞
Element on ArcMap OMD
FeatureLayer on Map Layer OMD
例子: MxDocument > Map > layer
或者通过另一个类的实例化来创建对象。
在OMD中的关系类型主要有: 类型继承(AT和yBpe为in普h通eri类ta对nc象e),C为组件类对象,D为一普通类, 创建(Inst如an下tia面tio代n码): 组成(ComAp=osBit.iwornit)eA:()对象间的主次关系
) 关联(AssAoc=iaCtio.wnrsiteA()
*
Layer
ILayer pLayer = pMap. get_Layer(1);
// Is( pLayer is IFeatureLayer ) {
FeatureLayer
MessageBox.Show( "Yes!, it’s a feature layer" ); }
从当前的文档中取得聚焦的Map (active data frame)
MxDocument 可以包含一些 Maps ( * )
从一个 Map中取得图层对象
MxDocument
图层对象有多种的类型 ( )
*
Map
IMxDocument pMxDoc = LoadMxdDoc (@"c:\Temp\test.mxd"); IMap pMap = pMxDoc.FocusMap;
������ GeoTransformations(地理变换)对象等。

arcgisengine二次开发实例

arcgisengine二次开发实例

arcgisengine二次开发实例
ArcGIS Engine是ArcGIS系列软件产品之一,用于在分布式系统环境下构建ArcGIS 技术,实现GIS应用软件开发。

开发人员可以利用ArcGIS Engine来构建自定义GIS应用程序、地理空间分析应用程序以及分布式GIS解决方案。

ArcGIS Engine提供了一个强大的开发平台,它的几乎所有的开发框架以及资源都位于一个方便的框架中,开发人员可以使用其中的几中可视化控件进行ArcGIS地图和数据应用开发。

ArcGIS Engine是一款基于COM(Component Object Model)技术的GIS应用平台,它通过COM在用户定义的交互界面之间提供了独立的组件。

组件定义了一种行为和数据的概念,组件间的交互可以非常简单的实现。

ArcGIS Engine可以作为地图数据的可视化引擎,允许开发者使用统一的图形化界面控制地图的显示和操作。

此外它还可提供复杂的数据空间分析模块,在开发人员输入实际的空间数据后,可进行数据空间分析,产生对空间结果分析的可视化输出。

ArcGIS Engine可以让开发者灵活地构建系统架构,以满足自定义的GIS应用开发需求。

开发人员可以使用ArcGIS Engine的组件,使其在分布式的应用程序框架中更好的发挥作用。

比如可以使用专业矢量处理组件,在GIS信息系统中构建面板,并在面板上放入各种可视化控件,满足对空间数据的管理和空间数据分析需求。

ArcGIS二次开发入门(一)

ArcGIS二次开发入门(一)

ArcGIS⼆次开发⼊门(⼀)
作者:朱⾦灿
来源:
公司培训ArcGIS⼆次开发(C#作为开发语⾔),⾃⼰回家动⼿实践了⼀下。

1. ⾸先是⼆次开发环境的安装(AE 10.1),需要装下⾯两项:
2. AE 10.1貌似只⽀持VS2010,VS2010以下的VS版本不⽀持,VS2012也不⽀持,安装了不⽀持的VS版本会出现以下提⽰:
3. 安装后在开发时可以添加引⽤来使⽤AE提供的接⼝,如下图:
4.在程序初始化之前需要检查AE组件的授权状态,代码如下:
private void InitializeComponent()
{
IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus esriLicenseStatuslicenseStatus = esriLicenseStatus.esriLicenseUnavailable;
esriLicenseStatus licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
if (licenseStatus != esriLicenseStatus.esriLicenseAvailable)
{
System.Diagnostics.Trace.WriteLine("Invalid Licensing.");
return;
}
......
}
假如组件完全没有授权,在调试时会出现下⾯错误提⽰:
假如有部分组件授权过期了,会提⽰你哪些组件过期了:。

ArcEngine二次开发入门

ArcEngine二次开发入门

符号
ISymbol:符号 IMarkerSymbol:点状符号 ILineSymbol:线状符号(线型) IFillSymbol:填充符号(填充图案)

SimpleMarkerSymbol
ISimpleMarkerSymbol CreateSimpleMarkerSymbol(IRgbColor rgbColor, esriSimpleMarkerStyle inputStyle) { if(rgbColor == null || inputStyle == null) { return null; } ISimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbolClass(); simpleMarkerSymbol.Color = rgbColor; simpleMarkerSymbol.Style = inputStyle; return simpleMarkerSymbol; }
}
添加栅格图层
void AddRasterFileToMap(string rasterFolder, string rasterFile) { IRasterLayer layer = new RasterLayerClass(); layer.CreateFromFilePath(rasterFolder + "\\" + rasterFile); = rasterFile; m_mapControl.AddLayer(layer, 0); }


IFeatureRenderer
ISimpleRenderer:简单渲染(所有要素采 用相同的渲染方式) IUniqueValueRenderer:唯一值分类渲染 IClassBreaksRenderer:连续值分级渲染

ArcGIS_Engine二次开发讲义

ArcGIS_Engine二次开发讲义

ArcGIS Engine二次开发实习初级讲义目录1 ArcGIS、ArcObjects和ArcGIS Engine简介.................................................................... - 3 -1.1 ArcGIS简介 ................................................................................................................ - 3 -1.2 ArcObjects简介 .......................................................................................................... - 4 -1.3 ArcGIS Engine简介.................................................................................................... - 5 -2 ArcGIS控件介绍.................................................................................................................... - 7 -2.1 ArcGIS控件简介 ........................................................................................................ - 7 -2.2重要控件简介............................................................................................................... - 9 -3 ArcGIS Engine二次开发入门 ............................................................................................ - 16 -3.1 ArcGIS Engine开发起步——第一个简单的地图显示程序 .................................. - 16 -3.2 属性查询.................................................................................................................... - 23 -3.3 空间查询.................................................................................................................... - 27 -3.4 BaseCommand开发实例 .......................................................................................... - 36 -3.5 BaseTool开发实例.................................................................................................... - 38 -3.6通过代码添加图层..................................................................................................... - 42 -3.7基于比例尺显示地图................................................................................................. - 44 -3.8 构建一个简单的GIS应用........................................................................................ - 46 -4.问题解决方法及帮助文档的使用........................................................................................ - 58 -4.1使用ArcObjects开发帮助系统............................................................................... - 58 -4.2阅读对象模型图(Object Model Diagram)......................................................... - 62 -1 ArcGIS、ArcObjects和ArcGIS Engine简介1.1 ArcGIS简介ArcGIS提供了一个可伸缩的框架,可以为独立用户或者多用户,既可以在桌面端也可以在服务器端提供GIS。

基于ArcGISEngine地理信息系统的二次开发

基于ArcGISEngine地理信息系统的二次开发

基于ArcGISEngine地理信息系统的二次开发基于ArcGISEngine地理信息系统的二次开发地理信息系统(Geographical Information System, GIS)是一种用于收集、存储、处理、分析和展示地理空间数据的计算机系统。

随着地理信息技术的不断进步,ArcGISEngine作为GIS领域开发的重要工具之一,为开发人员提供了丰富的功能和强大的开发平台,使得二次开发成为可能。

ArcGISEngine是Esri公司推出的一套开发工具包,基于ArcGIS核心技术,能够在各种WINDOWS平台上实现高性能、高度灵活的GIS应用程序开发。

它提供的API包括ArcObjects、ArcSDE、ArcGIS Server等,开发人员可以利用这些工具开发各种地理空间应用程序,满足用户的需求。

在进行二次开发时,首先需要理解ArcGISEngine的基本概念和核心功能。

ArcGISEngine使用一种被称为“地理数据对象”的结构组织和管理各种地理数据。

开发人员可以利用ArcObjects这一API来完成对地理数据对象的插入、查询、更新和删除等操作。

此外,ArcGISEngine还提供了丰富的符号化功能,使得地理数据可以以各种形式进行可视化展示。

在二次开发过程中,需要根据具体的需求对ArcGISEngine进行定制和扩展。

开发人员可以利用ArcObjects提供的面向对象的编程接口进行开发,根据需求自定义各种功能和工具。

例如,可以通过ArcObjects扩展空间分析功能,实现区域查询、缓冲区分析、路径分析等高级功能。

此外,还可以利用ArcGISEngine提供的控件库来开发用户友好的GIS应用界面,实现数据管理、地图显示、图层控制等交互操作。

ArcGISEngine还支持与其他系统和第三方数据源的集成,提供了与数据库、Web服务、传感器等系统的连接和交互接口。

例如,可以通过ArcObjects与数据库系统进行数据交互,从而实现地理数据的导入、导出、更新等操作。

ArcGISEngine二次开发:从入门到精通

ArcGISEngine二次开发:从入门到精通

ArcGISEngine⼆次开发:从⼊门到精通ArcGIS Engine是ArcGIS的⼀套软件开发引擎,可以让程序员创建⾃定义的GIS桌⾯程序。

它是ESRI在ArcGIS9版本才开始推出的新产品,它是⼀套完备的嵌⼊式GIS 组件库和⼯具库,使⽤ArcGIS Engine开发的GIS应⽤程序可以脱离ArcGIS Desktop⽽运⾏。

>>ArcGIS Engine与国⼟资源:ESRI在线⽀持:最好的帮助⽂档其实是arcobject sdk帮助⽂档和samples.....但是,有⼀本参考书还是必要的。

本书共16章。

第⼀部分为基础篇:第1~9章,主要是控件。

第⼆部分为应⽤提⾼篇:空间分析。

第10章。

第三部分:第11~12章,实例应⽤。

第四部分为空间数据库的操作。

第1章开发基础ArcGIS的类库总体可以分为界⾯控件类和操作组件类。

控件和组件是不⼀样的,控件是有界⾯的,组件是没有界⾯的。

所以它们的引⽤⽅式是不⼀样的。

需要注意它们的区别。

具体可以看:OM组件System类库:System类库是Engine中最底层的类库。

SystemUI类库:主要定义了ArcGIS系统中所使⽤的⽤户界⾯组件类型。

Geometry类库:包含了核⼼⼏何对象,如点、线、多边形及其⼏何类型和定义。

Display类库:包含了⽀持向输出装置绘制符号体系的组件。

Server类库:包含了⽤于获取到ArcGIS Server的连接的对象。

Output类库:包含了⽣成输出所必须的对象,通常是从地图或页⾯布局输出到打印机、绘图仪,或导出到⽂件中。

Geodatabase类库:Geodatabase类库:包含了所有与数据访问相关的定义的类型,为地理数据提供了编程API,是建⽴在标准⼯业关系型和对象关系数据库技术之上的地理数据库。

GISClient类库:DataSourcesFile类库:DataSourcesGDB类库:DataSourcesOleDB类库:DataSourcesRaster类库:GeoDatabaseDistributed类库:Carto类库:Carto类库:该类库⽀持地图的创建和显⽰,PageLayout 对象是地图及其底图元素的容器。

第二讲 ArcGIS Engine应用开发基础

第二讲 ArcGIS Engine应用开发基础

2-13
.NET 类
.NET 托管类代表ArcObjects 对象 Two types available
<COMobjectName>”Class”: 在类中实现所有的接口和成员函数 <COMobjectName>: 代表真正的ArcObjects 对象
创建类实例化真正的COM对象
Dim map as MapClass Dim map as MapClass map == New MapClass() map New MapClass() map.Extent == envelope map.Extent envelope
Copyright © 2004 ESRI. All rights reserved.
Developing Applications with ArcGIS Engine
2-8
COM 类
COM 类实现接口 所有类都实现Iunknown接口
管理对象生命周期 成员: QueryInterface, AddRef 和 Release
.NET Assemblies
开发工具
ArcGIS Developer Help (.NET) ILDASM.exe
Interop
COM Type Libraries
ArcObjects C++
Copyright © 2004 ESRI. All rights reserved.
Developing Applications with Ae以避免处理Implicit Casting带来的 InvalidCastException 异常
geometry == point geometry point geometry == CType(point, IGeometry) geometry CType(point, IGeometry) ‘Implicit cast ‘Implicit cast ‘Explicit cast ‘Explicit cast

ArcGIS二次开发学习内容

ArcGIS二次开发学习内容

第一篇、基础篇:第一章、ArcGIS体系介绍1、ArcGIS概述;2、ArcGIS二次开发方式、应用范围和优缺点第二章、ArcGIS二次开发软件安装和配置1、ArcGIS Desktop10安装;2、ArcEngie10安装;3、ArcServer10安装和配置;4、开发工具VS2010安装第二篇:ArcEngine开发第三章、Arcengine开发方式入门,1、搭建开发环境:1.1、ArcEngine的LIC使用,1.2、使用代码代替LIC设置;2、ArcEngine控件使用:2.1、Map Control控件,2.2、PageLayoutControl控件,2.3、ToolbarControl使用,2.4、TOCControl使用3、ArcEngine开发,ArcMap等桌面的应用程序:3.1、BaseCommd 命令应用和使用,3.2、BaseTool工具开发应用和使用,3.3、BaseToolbar工具条应用和开发,3.4BaseMenu菜单的应用和开发,3.5、DockableWindow浮动窗口的应用和开发,3.6、Addin应用和开发,第四章、地图显示 4.1、数据加载;4.2、地图符号化;4.3、制作专题图;4.4、地图的注记和标注;4.5、地图的投影第五章Geoprocessor(GP)使用5.1、GP调用基本方法;5.2、GP错误异常处理;5.3、GP数据处理案例;5.4、GP数据分析案例;5.5、GP调用数据模型案例第六章、数据查询和分析 6.1、一般的查询分析;6.2、空间缓冲区分析第七章、地图打印输出7.1、按纸张打印;7.2、指定比例打印;7.3、切割打印;7.4、批量生成Mxd导出图片,批量打印实现;7.5、地图打印综合案例第八章、Python 8.1、Python语言;8.2、Python在ArcGIS应用;8.3、Python和数据模型(ModelBuilder);8.4、Pyhon中批量处理第三篇:ArcGIS Server 开发第九章、ArcGIS Server 开发入门9.1、ArcGIS Server开发方式介绍;9.2、ArcGIS Server配置和性能优化;9.3、ArcGIS Server地图服务发布;9.4、ArcSDE数据的连接和使用;9.5、Silverlight开发入门第十章、ArcGIS server 控件使用10.1、资源管理控件;10.2、地图显示控件;10.3、其他相关控件;10.4、自定义Tool和Command;第十一章、ArcGIS 11.1、地图选择和定位;11.2、地图的图层控制;11.3、地图符号Server地图操作使用和各种专题图操作;11.4、数据的基本编辑第十二章、ArcGIS Server GP的调用12.1、ArcGIS Server GP调用方式;12.2、ArcGIS Server GP调用工具箱的工具;12.3、ArcGIS Server GP调用自定义的数据模型;12.4、ArcGIS Server GP服务发布第十三章、ArcGIS Server Silverlight开发13.1、Silverlight数据展示;13.2、把其他数据(如Google Earth)叠加到当前数据窗口;13.3、在线编辑(Web Editing);13.4、时态感知(Time-Aware);13.5、地图服务增强(Map Service)第十四章、ArcGIS Server开发案例14.1、地图缓冲区分析;14.2、地图网络分析(最短路径和服务区分析);14.3、地图查询分析案例。

ArcGIS Engine第一章 二次开发概述

ArcGIS Engine第一章 二次开发概述
AO开发出来的系统不是独立的产品,它必须以ArcGIS Desktop为后台基础。 这是AO和ArcEngine最主要的区别
ArcEngine是基于AO组件库的,即AO构建了ArcEngine,但ArcEngine是独 立于应用程序的AO编程环境,应用与ArcGIS Desktop应用程序框架之外的 ArcGIS组件
ColdFusion、ASP等多种Web Server端技术,同时开发了有望成为未来
Internet环境中GIS通用语言的ArcXML,为空间数据跨厂商跨平台的广
泛交流和共享打下了坚实的基础。
ArcSDE
2、ArcGIS 的服务器端
ArcSDE是ESRI的空间数据库引擎,用于对海量空间数据及其属性数据的管
开发组件:用于快速应用程序开发的高级用户接口控 件和用于高效开发的一个综合帮助系统。
扩展模块:AE标准版并不包含这些ArcObjects的许可,他们只能作为阔赞 存在,需要特定的License才能运行。
地图浏览
地图制作 数据查询
标准功能
数据分析
所有的开发控件
—MapControl, PageLayout, Toolbar, TOC, ArcReader
2、ArcGIS 的服务器端
用户的空间数据和应用可以通过ArcIMS 在 Intranet/Internet环境中进
行发布和共享。ArcIMS提供用户在服务器端可以以影像方式或矢量数据
流方式进行数据发布。客户端用户通过工业标准的通用浏览器即可对
ArcIMS服务站点进行访问和交互操作。ArcIMS支持包括Servlet、
没有ArcGIS桌面应用框架或对话框 需要许可授权
通过代码或应用工具配置

ArcEngine二次开发入门介绍

ArcEngine二次开发入门介绍


Display类库:Display类库包含用于显示GIS数据的对象。它包括
Display对象、Color对象、ColorRamp对象、DisplayFeedback对象、
RubberBand对象、Tracker对象、Symbol对象。
2021/8/14
31

Output类库: Output类库包含了AO中的所有输出对象:打印输出对象
AO的少部分功能。


ArcEngine具有简洁、灵活、易用、可移植性强等的特点ine 扩展模块
Geodatabase Update
❖ Spatial
❖ 3D With Global Visualization

Engine开发包包括了高级的Engine扩展模块

不能创建或实例化
抽象类永远不能有实例

为子类定义了泛化(general)
子类集成了抽象类的接口

抽象类的OMD 符号: 2维阴影矩形
2021/8/14
15
组件类 (CoClass)

可以创建:使用 New关键字
IMap pMap = new MapClass()
实例化: 从其它对象获得
IMap pMap = pMxDocument.FocusMap()
虫洞
2021/8/14
Element on
ArcMap OMD
FeatureLayer on
Map Layer OMD
21
例子: MxDocument > Map > layer

从当前的文档中取得聚焦的Map (active data frame)

ArcGIS Engine二次开发入门(课堂PPT)

ArcGIS Engine二次开发入门(课堂PPT)
“Members”指的是接口下的成员,这包括属性、方法等。这里我们不能一一给您列举出来,而是挑选一 个作为例子讲解。 例如我们看到“Search”成员,这是一个方法,通过对“Search”的描述,我们可以得到,“Search”方 法将“返回一个object cursor,其中包含经过特定的查询条件得到的要素对象”。通过这个描述,我们可 以大概得出,通过“Search”方法,我们可以从一个要素集中按照一定的查询条件得到一些特定的要素,供 后续使用。为了获得更加详细的描述,我们点击
.
72
.
73
如上图所示,对象模型图展示了每个对象内的各类之间的接口,继承、派生关系,属性及方法之 间的联系等,是对整个对象最完整的定义。对象模型图可视化的表达了ArcObjects的继承关系, 因而您能识别关键对象,查看哪些对象之间具有联系(如对象的创建关系),理解接口继承和派 生类型的定义,并且找出实现了一个类所实现的全部接口。参考对象模型图与参看帮助系统中具 体的接口所获得的信息是一致的,只不过查看具体的接口信息将更方便获得具体的使用方法,属 性设置方法等,而参看对象模型图是从全局来把握整个对象,更容易找出各接口之间的联系和调 用方式等。 对象模型图的放置路径为“X:\Program Files\ArcGIS\DeveloperKit\Diagrams”(X代表ArcGIS 安装所在的盘符)。 对象模型图的书写类似于UML图,对象模型图中也对其基本规则也有所解释,因而UML的具体语 法规则、定义等这里不再赘述,如果需要更加详细的信息,您可以参考UML方面的相关书籍,或 者参考《Exploring ArcObjects》中的相关章节。
.
3
5.6 BaseTool开发实例
.
4
.

ArcGISEngine二次开发——基础篇

ArcGISEngine二次开发——基础篇

ArcGIS Engine二次开发——基础篇1ArcGIS Engine二次开发——基础篇1.1第一个简单的ArcGIS Engine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。

如果您之前没有接触过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。

1.1.1创建一个新的工程首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。

图1新建项目对话框选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text属性为“地图浏览”,图2窗体命名1.1.2添加控件及引用点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。

用同样的方法,再将LicenseControl添加到Form1中。

图3 打开工具箱图4工具箱如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。

首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。

如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI. MapControl”前面打勾)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ArcGIS_Engine二次开发——基础篇ArcGIS Engine二次开发——基础篇1ArcGIS Engine二次开发——基础篇1.1第一个简单的A rcGIS Engine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。

如果您之前没有接触过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。

1.1.1创建一个新的工程首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。

图1新建项目对话框选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text 属性为“地图浏览”,图2窗体命名1.1.2添加控件及引用点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。

用同样的方法,再将LicenseControl添加到Form1中。

图 3 打开工具箱图4工具箱如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。

首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。

如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾)。

图5重置工具箱图6选择项图7选择工具箱项图8选择工具箱项添加好MapControl和LicenseControl之后,调整Form1和MapControl的位置与大小,如下图所示:图9窗体布局1.1.3添加地图在MapControl上单击鼠标右键,选择“属性”,则会弹出MapControl的属性设置面板,在之前也介绍过,通过这个面板可以完成许多简单的工作。

如图所示,点击“Map”面板,之后点击按钮,在弹出的对话框中选择路径为“……\GIS设计与开发\例子数据\China”,再在此路径下选择“bou2_4p”,点击“Open”。

之后在MapControl的属性页上点击“确定”即可。

图10“Map”面板至此,我们已经完成了一个最简单的地图显示程序。

.点击“启动调试”按钮(或者在“调试”菜单下选择相应命令,或者按键盘的F5键),可以得到如下的运行结果。

图11初次运行结果1.1.4添加代码我们没有书写任何代码,就得到了一个最简单的地图显示程序。

但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和全图显示的功能。

选中MapControl控件,单击属性窗口中的事件按钮,可以看到MapControl控件能够响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统),我们可以通过双击对应事件进入代码编辑界面,这里我们选择“OnMouseDown”事件(注:控件的“OnMouseDown”事件也可以通过双击控件直接进入到代码编辑界面),下一步就需要在这个事件中添加响应鼠标的相关代码。

图12 MapControl控件支持的所有方法请您在axMapControl1的OnMouseDown事件中添加代码,如下所示:private void axMapControl1_OnMouseDown(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e){if (e.button == 1)this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();else if (e.button == 2)this.axMapControl1.Extent = this.axMapControl1.FullExtent;}再次运行程序,鼠标左键在地图上拉框可以实现地图的放大功能,而右键单击地图则会还原地图的全图显示。

图1任意比例尺放大功能如果将代码替换如下,则能实现左键放大,右键漫游的功能。

private void axMapControl1_OnMouseDown(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e){if (e.button == 1)this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();else if (e.button == 2)this.axMapControl1.Pan();}注释:代码中根据e中包含的“button”值来判断鼠标的单击操作是来自何处,若button值为1,则为鼠标左键,2代表鼠标右键,4代表鼠标中键。

当判断得到是鼠标左键单击时,执行“this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();”该语句调用了“T rackRectangle()”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域(Extent),这样就实现了地图的放大功能。

类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。

1.1.5小结通过这个例子,我们制作出了一个最简单的地图浏览程序AEMapView,并能响应一些基本的鼠标操作。

在MapControl的属性页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd或者*.mxt),您也可以利用刚才的方式一次性多加入一些图层而不仅仅加入“bou2_4p”一个,同时可以更改各图层的叠放次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置MapControl的显示方式,是否支持地图的预览功能,边框样式等等。

您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉ArcGIS Engine的开发是有一定帮助的。

如果需要重置MapControl,只需要点击“Data”面板中的“Reset”按钮。

当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。

1.2属性查询查询是GIS中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。

1.2.1添加控件如果上一小节的工程已经关闭,则将其打开,如果您之后又在MapControl中添加了一些别的数据,请将其删除,只保留一个“bou2_4p”图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。

用之前讲过添加控件的方式,在窗体中添加一个Label和一个TextBox。

将Label控件的“Text”属性修改为“城市名称”,TextBox控件的Name属性修改为txtStateName。

控件添加完毕后效果如下:图2添加Label控件和TextBox控件后界面1.2.2添加代码首先添加引用。

首先可以在项目的“解决方案资源管理器窗口”中单击展开“引用”选项,查看项目中已添加引用。

图3项目已添加“引用”这个项目中我们需要使用“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”两个引用项,点击菜单栏上的“项目”—>“添加引用”(或者在“解决方案资源管理器窗口”中右击“引用”,在弹出菜单中选择“添加引用”),在弹出的对话框中选择需要添加的引用,同时选择“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”(选择的时候按下Ctrl键以同时选择多个),这里“ESRI.ArcGIS.Carto”在添加MapControl控件时已自动添加,我们只添加“ESRI.ArcGIS.Geodatabase”,点击确定。

图4添加引用对话框之后双击T extBox控件,进入代码编辑界面。

在代码编辑区域的命名空间(namespace)的上方输入以下内容:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;如下图所示:图5引用添加位置之后在控件TextBox的事件中选择KeyUp,在KeyUp事件中添加以下代码:图6KeyUp方法private void txtStateName_KeyUp(object sender, KeyEventArgs e){//判断鼠标键值,如果Enter键按下抬起后,进入查询if (e.KeyCode==Keys.Enter){//定义图层,要素游标,查询过滤器,要素IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeature pFeature;//获取图层pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer;//如果图层名称不是states,程序退出if ( != "bou2_4p")return;//清除上次查询结果this.axMapControl1.Map.ClearSelection();//pQueryFilter的实例化pQueryFilter = new QueryFilterClass();//设置查询过滤条件pQueryFilter.WhereClause = "NAME='" + txtStateName.Text + "'";//查询pFeatureCursor = pFeatureLayer.Search(pQueryFilter, true);//获取查询到的要素pFeature = pFeatureCursor.NextFeature();//判断是否获取到要素if (pFeature!=null){//选择要素this.axMapControl1.Map.SelectFeature(pFeatureLayer, pFeature);//放大到要素this.axMapControl1.Extent = pFeature.Shape.Envelope;}else{//没有得到pFeature的提示MessageBox.Show("没有找到名为" + txtStateName.Text + "的省", "提示");}}}运行程序,分别向编辑框中输入“吉林省”和“长春省”,键入回车,如下图所示:图7吉林省查询结果图8长春省查询结果注释:if (e.KeyCode==Keys.Enter)上述代码是一个判断语句,即当用户输入回车的时候,开始进行查询。

相关文档
最新文档