实验3 ArcGIS Engine 开发
Arc Engine开发个人手册

第一章Arc Engine 介绍第二章Arc Engine结构一、Arc Engine包含的主要库文件1、System库ArcGIS结构中最底层的库,包含为其它库提供服务的组件。
2、SystemUI包含为用户界面组件(在ArcEngine中可以进行扩展)定义的接口,包括:ICommand, ITool, 和ItoolControl接口。
3、Geometry处理存储在要素类或其它图形元素中的几何图形要素。
我们经常遇到的基本几何目标有Point, MultiPoint, Polyline 和Polygon4、Display包含显示地理数据的像,如:symbols,colors 等。
我们通常通过类似Map或PageLayout 对像提供的视图(view)来访问Display5、Server包含用来连接到ArcGIS Servers的对像。
我们可以通过GISServerConnection对象访问ArcGIS Server。
6、Output用来将图形输出到设备上,如printers、plotters和hardcopy formats(如:EMF,JPG,BMP等)。
可扩展7、GeoDatabase为geodatabase提供API函数。
可以扩展以支持特定数据格式(Features, Classes, etcetera),可通过PlugInDataSource对象加入自定义的矢量数据源。
Geodatabase支持的本地数据类型无法扩展8、GISClient用来接受ArcIMS和ArcGIS Server.提供的网络服务。
9、DataSourcesFile包含以文件为数据源的(shapefile,coverage, TIN, CAD, SDC, StreetMap, and VPF)部分GeoDatabase API函数的实现。
10、DataSourcesGDB包含以数据库为数据源(Microsoft Access、ArcSDE—IBM DB2, Informix, Microsoft SQL Server, and Oracle)部分GeoDatabase API函数的实现。
ArcEngine实验内容

ArcEngine实验内容实验一:熟悉ArcEngine中的TocControl、ToolbarControl、MapControl基本控件,创建简单的ArcEngine开发框架,能进行放大、缩小、平移、全图,并具有鹰眼功能;实验二:自定义简单功能的Commands、Tools,并使用ToolbarControl加载到工具栏上;实验三:使用ISegmentCollection、IPointCollection、IGeometryCollection接口,在地图上构建IPoint、Line、Polyline、Polygon、IEnvelope、IMultipoint、Path 对象,可以直接添加到一个图层中,也可以在地图上以Element元素的方式添加到地图上。
实验四:在TocControl控件中添加快捷菜单,当在某一图层上右击弹出快捷菜单,快捷菜单中实现对点、线、面图层分别进行符号化。
系统必须自动能判断当前图层是那种类型的图层(如点、线、面),实现对这些图层的简单符号化和高级符号化的功能。
1.调用ArrowMarkerRender对象、CharacterMarkerSymbol对象、PictureMarkerSymbol对象、MultiLayerMarkerSymbol对象实现点状符号化。
2.调用、CartographicLineSymbol对象、PictureLineSymbol对象实现线状符号化。
3.调用LineFillSymbol对象、MarkerFillSymbol对象、GradientFillSymbol对象实现面状符号化。
4.使用IFormattedTextSymbol对象、MarkerTextBackground对象、BallonCallout对象、LineCallout对象实现向MapContrl控件中添加符号化处理的文字。
5.对每个图层能进行SimpleRenderer(简单渲染)、ClassBreaksRenderer(分级渲染)、UniqueValueRenderer(按值渲染)、BiUniqueValueRenderer (双变量渲染)、ProportionalSymbolRenderer (梯度渲染)、ChartRenderer (图表渲染)、DotDensityRenderer (点密度渲染)、ScaleDependentRenderer (按比例尺渲染)图层的符号化和渲染的参数尽可能使用一个对话框,在对话框中实现对图层颜色、样式、文字字体的设置,按确定Button后实现选定图层的要素的符号化和渲染。
ArcEngine_开发文档(ArcGIS AO开发)

ArcEngine 开发1.基础篇1.1.开发环境1.1.1.如何在ArcMap的VBA环境中编程ArcMap是ArcGIS家族的成员之一,它内置了一种集成编程环境―VBA (Visaul Basic for Apllications)。
通过VBA编程,用户不但可以扩展ArcMap 的菜单、工具条等,而且可以完成大多数用户的特定需求。
ArcMap中VBA编程的方法有两种,一种是写VBA宏,另一种是创建UIControl 并在其事件中写入实现用户需求的代码。
下面列出两种方法的一般步骤。
方法一:写VBA宏(直接在VBA编辑器中编辑函数和过程)1、如图1,单击菜单栏中的<Tools>命令,选择<Macros>的<Visual Basic Editor>项, 直接启动ArcMap的VBA编辑器;或者选择<Macros>的<Macros>项,进入如图2所示Macro对话框,在“Macro Name”文本框中输入要创建的宏的名称,并点<Create>按钮,启动VBA编辑器。
图1 启动Macro对话框/启动VBA编辑器图2 Macro对话框2、在图3所示的窗口中,用户可以根据实际选择在Normal节点或者Project 节点的ThisDocument、Forms、Modules中编写宏(函数或过程),Normal节点下所写的宏系统自动保存,除非用户删除,否则它将始终存在并在任何工程中都有效;而在Project节点下所写得宏随工程保存(如不保存工程,则宏也将不被保存),并只在工程中有效。
图3 VBA编辑器(VBE)3、运行VBA宏在VBA编辑器中写好VBA代码后,有两种方式运行:第一,点击VBA编辑器工具条中的(运行)按钮,可立即运行写好的代码;第二,退出VBA编辑器,重新启动Macro对话框,如图2,选择要运行的VBA宏名称,点击<Run>按钮即可运行相应的VBA宏。
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信息系统中构建面板,并在面板上放入各种可视化控件,满足对空间数据的管理和空间数据分析需求。
基于ArcGISEngine的地理信息系统二次开发原理和方法_金靖

测绘与空间地理信息
GEOMATICS & SPATIAL INFORMATION TECHNOLOGY
Vol. 35,No. 3 Mar. ,2012
基于 ArcGIS Engine 的地理信息系统 二次开发原理和方法
Байду номын сангаас金靖
( 湖北省鄂州市勘测院,湖北 鄂州 436000)
第3 期
金 靖: 基于 ArcGIS Engine 的地理信息系统二次开发原理和方法
47
开发的原理和 方 法,以 期 为 相 关 地 理 信 息 系 统 的 开 发 和 建设提供参考。
1 COM 原理
COM( Component Object Model,组件对象模型) 是一 种以组件为发 布 单 元 的 对 象 模 型,它 可 作 为 一 种 跨 平 台 的客户服务器系统开发技术,具有开放的体系结构,它不 仅定义了组件 程 序 之 间 进 行 交 互 的 标 准,并 且 也 提 供 了 组件程序运行所需的环境[7]。COM 提供了编写组件的一 种标准方法,只要遵循 COM 标准的组件就可以组合起来 以形成应用程序。COM 接口是一组逻辑上相互关联的操 作,这些操作定 义 了 某 种 行 为,即 这 组 操 作 的 规 范,而 非 特定的实现,实 质 是 接 口 代 表 了 接 口 调 用 者 和 实 现 者 之 间的一种约定,当两个应用程序通信时,一个应用程序初 始化二者之 间 的 关 系,这 个 应 用 程 序 被 称 为 COM 客 户 机,或 COM 控制器,而另一个应用程序被称为 COM 服务 器,COM 客户机访问由 COM 服务器提供的服务[9 - 11]。
3 ArcGIS Engine 开发实例
牟乃夏 ArcEngine教程 第2章 桌面GIS应用软件的开发方式

2. 使用DLL进行桌面软件开发
• 运行程序后并没有显示ZoomIn工具,这时需要对DLL功能应用部 署。
3. 使用Add-In进行桌面软件开发
• Add-In是ArcGIS 10.0提供的一种能够快速扩展桌面应用程序的全新 的扩展方式。其特点包括:
• • • • 1). 容易创建 2). 更易共享 3). 更加安全 4). 更易安装和管理
1. 使用VBA进行桌面软件开发
• 通过VBA开发环境进行ArcGIS桌面软件的扩展和定制是最简单的 GIS软件开发方式。只需专注于ArcGIS软件不能提供的功能,对于 ArcGIS软件已经提供的工具,直接“拿过来”使用即可。并且VBA 环境本身已经提供了对整个应用程序和文档进行控制的变量,例 如在ArcMap中开发人员可以直接通过Application、ThisDocument 两个全局变量获取程序本身和程序所使用的文档对象,使开发更 为快捷和简单。 • 在ArcGIS 10.0版本中,进行VBA的开发需要单独安装VBA开发程序 模块,安装ArcGIS Desktop时不再附带VBA安装选项。根据操作方 式的不同,在ArcGIS Desktop中进行VBA编程的方法有两种:一种 是编写VBA宏命令,另一种是创建UIControl工具并在其事件中写 入实现代码。
3. 使用Add-In进行桌面软件开发
• 下面以“获取多边形选择集”为例,介绍如何采用Add-In开发方 式进行桌面程序的扩展。 • 1)启动Visual Studio 2010,选择【文件】→【新建项目】,在弹 出对话框左侧“Visual C#”选择项下,选择 “ArcGIS”→“Desktop Add-Ins”,在右侧窗口中,选择 “ArcMap Add-in”方式,输入新建项目的名称 “SampleArcMapAddin”,选择项目的存储位置“C:\”,点击 【确定】按钮,创建Add-In示例项目。
ArcGISEngine+C实例开发教程

《A r c G I S E n g in e+C#实例开发教程》目录第一讲桌面GIS应用程序框架的建立 (2)第二讲菜单的添加及其实现 (5)第三讲MapControl与PageLayoutControl同步 (9)第四讲状态栏信息的添加与实现 (24)第五讲鹰眼的实现 (27)第六讲右键菜单添加与实现 (32)教程Bug及优化方案1 (40)第七讲图层符号选择器的实现1 (40)第七讲图层符号选择器的实现2 (57)版权声明:《ArcGISEngine+C#实例开发教程》为3SDN()原创教程,版权所有。
禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。
教程采用C#语言,以VS2005为开发工具。
读者对象:ArcGISEngine(以下简称AE)开发初学者,了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。
预期学习效果:进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“”重命名为“”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。
选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。
选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。
基于.NET的ArcGIS Engine 的开发

目录实验目的 (2)实验内容 (2)实验步骤 (2)结论 (11)基于.NET的ArcGIS Engine 的开发实验目的.NET框架引入一个改进的安全模式,.NET框架不会自动使用当前版本公共语言运行库来运行使用以前版本的.NET框架构建应用程序,因此,在.NET4框架下运行以前的运用程序,使用Visual Studio的项目的属性中制定的目标.NET框架来重新编译你的应用程序,或者在应用程序的配置文件中使用元素来指定支持的运行时刻库。
实验内容将应用程序用到的ArcGIS控件和其他的ArcGIS Engine库引用装载到开发环境之中。
实验步骤1、Visual ,从“新建项目”对话框中创建一个新的Visual C# “windows窗体应用程序”项目,如图1所示。
图12、将项目命名为“Sample”,并选择“位置”保存该项目。
3、单击“视图”菜单,选择“工具箱”子菜单项。
4、4、在“工具箱”空白处右键,在弹出的快捷菜单中选择“添加选项卡”,然后在新增选项卡上输入“ESRI”作为选项卡标签,如图2。
图25、在弹出的对话框中选择“NET Framework组件”选项卡,选中“AxMapControl”、“AxPageLayoutControl”、“AxToCControl”和“AxToolbarControl”等复选框,单击“确定”,将所选的控件添加到工具栏上,如图3。
图36、在“项目”菜单上选择“添加引用”项添加引用,如图4所示,添加如下项目。
图47、打开.NET窗体,双击“工具箱”中“ESRI”标签栏中的AxMapControl控件,将MapControl加入到窗体上,再将AxToolbarControl也添加到窗体上,如图5。
图58、在窗体上双击显示窗体代码窗口,加载图层到MapControl中,在FormLoad事件中添加地图文档加载代码,代码如下图6中所示。
图69、设置ToolbarControl与MapControl控件关联。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
openMapDoc.OnClick();
}
在添加数据AddData时,我们也要进行地图共享,故在AddData_Click函数后面添加如下代码:
IMap pMap = this.axMapControl1.Map;
合肥工业大学
资源与环境工程学院
《地理信息系统设计与开发》实验报告
实验3
姓 名
学 号
专 业地理信息系统
班 级
任课教师张明明
实验3ArcGIS Engine开发
1.实验目的和内容:
1.熟悉并运用arcgis类
2.实现并完成地图与版式的联动。即:MapControl与PageLayoutControl同步
command.OnCreate(m_controlsSynchronizer.ActiveControl);
command.OnClick();
}
在切换视图时,我们要激活相关的视图,故在设计视图的属性面板中选择tabControl2控件,再选择事件按钮,找到“SelectedIndexChanged”事件双击添加之。其实现代码如下所示:
else
command.OnCreate(m_controlsSynchronizer.PageLayoutControl.Object);
command.OnClick();
}
//创建新的地图实例
IMap map = new MapClass();
= "Map";
m_controlsSynchronizer.MapControl.DocumentFilename = string.Empty;
if (result == DialogResult.Cancel) return;
if (result == DialogResult.Yes) this.Save_Click(null, null);
}
OpenNewMapDocument openMapDoc =
new OpenNewMapDocument(m_controlsSynchronizer);
this.m_controlsSynchronizer.ReplaceMap(pMap);
在另存为地图文档时,有可能会丢失数据,因此我们需要提示用户以确认操作,故需修改SaveAs_Click函数,如下所示:
/// <summary>
///另存为地图文档命令
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SaveAs_Click(object sender, EventArgs e)
{
//如果当前视图为MapControl时,提示用户另存为操作将丢失PageLayoutControl中的设置
if (m_controlsSynchronizer.ActiveControl is IMapControl3)
//添加打开命令按钮到工具条
OpenNewMapDocument openMapDoc = new OpenNewMapDocument(m_controlsSynchronizer);
axToolbarControl1.AddItem(openMapDoc, -1, 0, false, -1, esriCommandStyles.esriCommandStyleIconOnly);
2.实验过程:
1.新建同步类ControlsSynchronizer
2、新建Maps类
3、新建打开文档类OpenNewMapDocument
4、两种视图的同步
在同步类中,要用到Maps类,用于管理地图对象。与新建同步类ControlsSynchronizer类似,我们新建一Maps类,其所有代码如下所示:
//为了在切换MapControl和PageLayoutControl视图同步,要添加Framework Control
m_controlsSynchronizer.AddFrameworkControl(axToolbarControl1.Object);
m_controlsSynchronizer.AddFrameworkControl(this.axTOCControl1.Object);
}
}
5、编译运行
3.实验心得:
这个实验真的很始的时候一直报错,说“引用类没有定义”后来发现原来是在写这个程序之前的一个程序当中添加了一些无关的代码影响了这个功能的实现,在检查了类的代码之后,重新进行了编译,成功运行。
private void Open_Click(object sender, EventArgs e)
{
if (yerCount > 0)
{
DialogResult result = MessageBox.Show("是否保存当前地图?", "警告",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
{
if (MessageBox.Show("另存为地图文档将丢失制版视图的设置\r\n您要继续吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
return;
}
//调用另存为命令
ICommand command = new ControlsSaveAsDocCommandClass();
因为我们自动派生了打开文档类,并自己将其添加到工具条,所以我们就不需要工具条原来的“打开”按钮了,可以ToolbarControl的属性中将其删除。
下面,我们可完成上一讲遗留的功能了。
/// <summary>
///新建地图命令
/// </summary>
/// <param name="sender"></param>
ControlsSynchronizer(m_mapControl, m_pageLayoutControl);
//把MapControl和PageLayoutControl绑定起来(两个都指向同一个Map),然后设置MapControl为活动的Control
m_controlsSynchronizer.BindControls(true);
/// <param name="e"></param>
private void New_Click(object sender, EventArgs e)
{
//询问是否保存当前地图
DialogResult res = MessageBox.Show("是否保存当前地图?", "提示",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
{
if (this.tabControl2.SelectedIndex == 0)
{
//激活MapControl
m_controlsSynchronizer.ActivateMap();
}
else
{
//激活PageLayoutControl
m_controlsSynchronizer.ActivatePageLayout();
//更新新建地图实例的共享地图文档
m_controlsSynchronizer.ReplaceMap(map);
}
/// <summary>
///打开地图文档Mxd命令
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <summary>
///切换地图和制版视图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tabControl2_SelectedIndexChanged(object sender, EventArgs e)
在3sdnMap.cs中添加成员变量,即同步类对象:
private ControlsSynchronizer m_controlsSynchronizer = null;
在Form1_Load函数中进行初始化工作:
//初始化controls synchronization calss
m_controlsSynchronizer = new
if (res == DialogResult.Yes)
{
//如果要保存,调用另存为对话框
ICommand command = new ControlsSaveAsDocCommandClass();
if (m_mapControl != null)
command.OnCreate(m_controlsSynchronizer.MapControl.Object);