ArcGIS Engine+C#实例开发教程

合集下载

ArcGIS Engine 10.2 安装教程

ArcGIS Engine 10.2 安装教程

ArcGIS Engine 10.2.x软件安装一、安装前准备在开发ArcGIS Engine程序之前,需要首先部署完成开发环境。

本文的ArcGIS Engine 开发实例以C#语言为例,C#的集成开发环境选择Visual Studio 2012,对ArcGIS Engine开发环境的搭建需要遵循下面的步骤顺序进行:1. 安装Visual Studio 2012;见教程《Visual Studio 2012(2013)安装激活教程》2. 安装ArcGIS Engine Runtime 10.2 或者ArcGIS Desktop 10.2;见《ArcGIS 10.2下载安装破解汉化教程》3. 安装ArcGIS Engine Developer Kit For Microsoft .NET Framework 10.2;ArcGIS Engine Developer Kit有支持多种开发语言的开发包,用户可以使用VB6,VC++,C#,Java等对ArcGIS Engine进行开发。

每种语言都有对应的ArcGIS Engine Developer Kit 安装包,本文主要以C#为例。

注释:ArcGIS Engine DevKit 10.2的安装需要安装Microsoft .NET Framework 3.5 Service Pack 1,因为ArcGIS Engine DevKit 10.2在安装时会检测本地是否已经安装.Net Framework 3.5,如果已经安装,那么ArcGIS Engine的.Net类库就会安装到系统上,如果没有检测到.Net Framework 3.5,那么ArcGIS Engine的.Net类库就不会安装到系统上;具体表现为在ArcGIS Engine的安装目录下会有一个DotNet的文件夹,如果该文件夹存在就表示ArcGIS Engine的.Net类库已经安装到本地系统上。

ArcGIS Engine中自定义工具

ArcGIS Engine中自定义工具

ArcGIS Engine中创建自定义工具ArcEngine除了其内置120多种常用工具外,我们还可以根据我们的需要定义自己的工具,大概过程是创建一个类,使其继承BaseCommand或BaseTool,重写其构造函数和鼠标时间等。

最好生成可以复用的dll。

这种自定义工具的最大的优点是极大的提高了代码的可重用性,如上生成的dll动态链接库可以在任意程序中引用以实现该工具的功能。

此外工具的外观和鼠标样式也是可以修改的。

以下为具体过程。

和例子有点不一样,附带原理注释。

1. 从新建项目对话框创建一个新的Visual C# “类库”项目。

2. 将项目命名为“Commands”,并选择保存位置存贮之。

3. 单击项目菜单并选择“添加引用(R)…”。

4. 在添加引用对话框中,复选“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.Display”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS..Utility”和“ESRI.ArcGIS.ControlCommands”。

5. 在项目中增加一个类,名字叫AddDateTool。

6. 点击项目菜单并选择添加现有项,浏览样例源码目录并找到date.bmp文件将其加入到你的项目。

7. 在解决方案资源管理器中点击date.bmp在属性窗口显示其属性。

改变生成操作属性为嵌入的资源。

这张位图将被用来作为命令按钮的外观。

8. 改变AddDateTool的命名空间的名称为CSharpDotNETCommands。

namespace CSharpDotNETCommands{……注:要在Visual Basi .NET中改变命名空间的名称,则在解决方案资源管理器的项目上点击右键并选择属性,在项目属性页中选择常规并改变根命名空间后,按确定。

9. 在AddDateTool类代码窗口的顶部增加以下引用。

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 Engine简介

ArcGIS Engine简介

ArcGIS Engine简介1.3 ArcGIS Engine简介ArcGIS是美国ESRI(Environmental Systems Research Institute, Inc. 美国环境系统研究所公司)推出的一条为不同需求层次用户提供的全面的、可伸缩的GIS产品线和解决方案。

ESRI是GIS领域的拓荒者和领导者,而ArcGIS也代表了当前GIS行业最高的技术水平。

1.3.1 ArcGIS产品框架ArcGIS是一个可伸缩的GIS平台,可以运行在桌面端、服务器端和移动设备上。

它包含了一套建设完整GIS系统的应用软件,这些软件可以互相独立或集成配合使用,为不同需求的用户提供完善的解决之道。

ArcGIS的主要产品包括4种:n ArcGIS Desktop——运行在桌面端的专业GIS软件套件,这套软件包括ArcReader、ArcView、ArcEditor和ArcInfo四个级别的产品,每个产品都拥有逐步增强的功能和ArcGIS扩展模块。

n ArcGIS Engine——为开发嵌入式GIS和独立运行的GIS桌面端应用程序而推出的二次开发组件库,它是GIS开发者产品的主要部分。

n 服务器端GIS——ArcIMS、ArcGIS Server和ArcGIS Image Server,它们是运行在服务器端的数据管理和发布软件,也是ESRI产品发展的趋势。

n 移动GIS——ArcPad及ArcGIS Mobile,它们是运行在PDA等移动设备上的GIS软件。

ArcGIS是基于一套共享的GIS组件开发实现的,这套组件被命名为ArcObjects,它包含了大量可编程组件,实现了ArcGIS的全部功能。

因此,ArcObjects 可以被认为是ArcGIS产品的核心,熟悉ArcObjects的过程同时也是熟悉ArcGIS Engine的过程。

关于ArcObjects的基础知识,读者可以翻阅相关书籍。

ArcGIS可以访问的数据包括各种类型的文件型数据、多用户DBMS数据、Web Service和多种应用程序数据通道。

ArcEngine概述

ArcEngine概述

ArcEngine概述
• ArcEngine不是一个终端用户产品,而是软 件开发人员的工具包,包括一系列制图组 建。它使程序员能够向现有应用软件中添 加动态制图和GIS功能,或者构建自定义制 图与GIS解决方案。 • ArcEngine的核心是AO组件。他是一组完备 的并且打包的嵌入式GIS组件库和工具库。 用户可以构建自己的GIS和制图应用程序。
ArcGIS Engine 功能
• 选择与某些要素的距离在一定范围内的要素。 • 用结构化查询语言(SQL)表达式查找和选择要素。 • 用专题方法,如value map、class breaks和dot density等为要素着色。 • 动态显示实时或时间序列数据。 • 通过地理编码地址或街道交叉口在地图上查找位置。 • 转换地图数据的坐标系统。 • 在要素几何形状上执行几何操作以创建缓冲区、计 算差异、发现交叉、合并或反交叉。 • 处理要素形状或旋转地图。 • 创建和更新地理要素及其属性。
ArcGIS Engine运行时(Runtime)
• ArcGIS Engine的最后一个组件就是其运行时 选件。用ArcGIS Engine软件开发工具包建立 的所有应用程序为成功执行都需要合适级别 许可的ArcGIS Engine运行时。ArcGIS Engine运 行时是建立ArcGIS Desktop的平台,因此,在 ArcGIS Engine应用程序开发人员允许的情况 下,ArcGIS Desktop应用程序的用户可以执行 基于 Engine的自定义应用程序。ArcGIS Engine运行时有多种选项,从标准版本一直 到企业版本。
ArcGIS Engine 用户
– ArcGIS Desktop的底层组件就是组成ArcGIS Engine的ArcObjects组件。这允许每个ArcGIS Desktop用户运行ArcGIS Engine应用程序。开发 人员可以为ArcGIS Desktop用户开发和部署基于 Engine的应用程序,或者扩展ArcToolbox,使其 具有用ArcGIS Engine开发工具包建立的自定义 工具集。

arcengine要素范围

arcengine要素范围

arcengine要素范围ArcGIS Engine 是由 Esri 公司开发的一种 GIS 开发平台,它提供了一套强大的工具和功能,用于构建和定制地理信息系统 (GIS) 应用程序。

ArcEngine 主要针对开发人员提供各种 GIS 功能来构建自定义 GIS应用程序,包括地理数据处理、地理分析、地图显示等。

ArcGIS Engine 提供了丰富的要素操作范围,用于管理、分析和描述地理信息。

以下是 ArcGIS Engine 的要素范围的主要特点和用途:1. 空间数据模型:ArcGIS Engine 提供了多种不同的要素类型,用于存储和管理空间数据。

其空间数据模型包括点、线、面、多点、多线、多边形等要素类型,可以满足不同类型的空间数据存储和查询需求。

3. 空间查询:使用 ArcGIS Engine,可以进行空间查询来查找满足特定空间条件的要素。

开发人员可以根据地理位置信息进行查询,例如查找一些区域内的所有建筑物或道路。

4. 地理分析:ArcGIS Engine 提供了一套强大的地理分析工具,可以对空间数据进行统计、分析和建模。

开发人员可以使用 ArcObjectsAPI 进行地理分析,以实现自定义的 GIS 分析功能。

5. 地图显示和渲染:ArcGIS Engine 支持地图的创建、显示和渲染。

开发人员可以根据需要配置地图的显示样式和符号,以满足不同应用程序的需求。

此外,还可以实现地图的交互功能,例如缩放、平移和选择等。

6. 数据输出和导出:ArcGIS Engine 允许将地理数据输出到不同的格式,包括图片、PDF、Excel等。

开发人员可以使用 ArcObjects API进行数据导出,以便将地理信息以各种形式分享给用户。

7. 数据库连接和管理:ArcGIS Engine 支持与各种类型的数据库进行连接和管理,例如 ESRI Geodatabase、Oracle、SQL Server等。

这使得开发人员可以使用实际的地理数据来进行应用程序的开发和测试。

arcgisengine 圆弧处理

arcgisengine 圆弧处理

arcgisengine 圆弧处理ArcGIS Engine是一款功能强大的地理信息系统(GIS)开发平台,它提供了丰富的地理空间分析和处理工具,其中包括圆弧处理功能。

圆弧处理是GIS中常用的一种空间分析方法,用于处理和分析曲线形状的空间数据。

本文将详细介绍ArcGIS Engine中的圆弧处理功能及其应用。

我们需要了解什么是圆弧。

在地理空间分析中,圆弧是由一系列点组成的曲线,它可以用来表示地球上的道路、河流、边界等。

而圆弧处理则是对这些曲线进行各种操作和分析的过程。

ArcGIS Engine提供了丰富的圆弧处理功能,包括圆弧生成、圆弧拟合、圆弧插值等。

其中最常用的是圆弧生成功能,它可以根据给定的点集生成圆弧。

例如,我们可以通过给定的三个点来生成一个圆弧,这个圆弧可以用来表示一条道路或河流的曲线形状。

除了圆弧生成,ArcGIS Engine还提供了圆弧拟合功能。

当我们有一条曲线,但不确定它是由多个圆弧组成的时候,可以使用圆弧拟合功能来估计曲线的圆弧参数。

这样可以更好地描述曲线的形状,方便后续的分析和处理。

ArcGIS Engine还提供了圆弧插值功能。

在某些情况下,我们可能需要在已有的圆弧之间插入新的点,使得整条曲线更加平滑。

圆弧插值功能可以根据已有的圆弧和插入点的位置,生成一条新的圆弧,从而实现曲线的平滑化。

除了这些基本的圆弧处理功能,ArcGIS Engine还提供了许多其他的圆弧分析工具,如圆弧长度计算、圆弧与直线的交点计算等。

这些工具可以帮助我们更好地理解和分析曲线形状的空间数据。

在实际应用中,圆弧处理在许多领域都有广泛的应用。

例如,在交通规划中,我们可以使用圆弧处理来生成道路的曲线形状,从而更好地模拟车辆行驶的轨迹。

在地图绘制中,我们可以使用圆弧插值功能来平滑地图上的道路、河流等曲线要素,使得地图更加美观。

在地理空间分析中,我们可以使用圆弧拟合功能来估计曲线的圆弧参数,从而更好地理解和分析曲线的形状。

ArcEngine入门详细教程

ArcEngine入门详细教程

22
空间分析扩展
创建、查询和分析基于像元的栅格数据
坡度计算 坡向计算 用数字高程模型生成等高线 ……
2015-3-11
来吧,让我们一起走向成功!
23
3D分析扩展
实现数据的三维可视化 提供SceneControl和GlobeControl 创建表面和分析表面的多层3D数据 把3D功能嵌入到应用系统中。
来吧,让我们一起走向成功!
6
2、ArcGIS 的服务器端
ArcSDE
ArcSDE是ESRI的空间数据库引擎,用于对海量空间数据及其属性数据的管
理和驱动,为并发访问的客户端提供快速、安全的数据服务。ArcSDE支持 工业标准的DBMS平台(如:ORACLE、SQL Server、DB2、Informix等),
开发者使用的 包含了所有开发库和开发资源 可以进行所有的选项开发
两个产品都通过软件许可文件授权
2015-3-11 来吧,让我们一起走向成功! 12
ArcGIS Engine Developer Kit产品
用来创建独立、嵌入式的桌面应用程序
包含构建ArcGIS Engine应用程序所需的许可 构建在ArcObjects基础之上
是基于ArcGIS Engine应用的运行时
可分发安装
跨平台
Windows, UNIX & Linux
没有ArcGIS桌面应用框架或对话框 需要许可授权
通过代码或应用工具配置
2015-3-11
来吧,让我们一起走向成功!
15
ArcGIS Engine Runtime产品
ArcGIS Engine运行时包含:
2015-3-11 来吧,让我们一起走向成功! 10

ArcGISEngine+C实例开发教程

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。

arcgisengine 处理弧线

arcgisengine 处理弧线

arcgisengine 处理弧线ArcGISEngine是一个强大的GIS开发平台,可以用于开发各种GIS 应用程序。

在 ArcGIS Engine 中,可以使用弧线来描述地图要素的形状,例如道路、管道、河流等。

处理弧线是 ArcGIS Engine 开发中的一个重要问题,本文将介绍如何使用 ArcGIS Engine 处理弧线。

一、弧线的概念弧线是由一系列点和曲率描述的曲线,用于描述地图要素的形状。

在 ArcGIS Engine 中,弧线可以通过几何对象 (Geometry) 来表示,其中包括折线 (Polyline) 和多边形 (Polygon) 等。

二、弧线的属性弧线有两个重要的属性:曲率和半径。

曲率表示弧线的弯曲程度,通常使用度 (Degree) 或弧度 (Radians) 来表示。

半径表示弧线的曲率半径,通常使用米 (Meter) 或英尺 (Feet) 来表示。

三、处理弧线的方法1. 创建弧线可以使用 ArcGIS Engine 中的 IConstructCurve 接口来创建弧线。

例如,可以使用该接口创建一个三点弧线:IConstructCurve curve = new CircularArcClass();curve.ConstructThreePoints(point1, point2, point3, false);其中,point1、point2、point3 分别表示弧线的起点、中点和终点,false 表示弧线是逆时针方向。

2. 获取弧线的曲率和半径可以使用弧线的 ICurve 接口获取弧线的曲率和半径。

例如,可以使用该接口获取一个弧线的曲率:ICurve curve = new CircularArcClass();double degree = curve.GetSubcurveParameterization(0, 1).Curvature;其中,GetSubcurveParameterization 方法获取弧线的子曲线参数化,0 表示从起点开始,1 表示到终点为止。

ArcGIS Engine基础实战

ArcGIS Engine基础实战
组件
Engine 库 – 制图、绘制、选择、编辑等 Control 库 – 地图控件、布局控件、工具条等
APIs
COM、.NET、Java、C++
工具
文档、开发工具
ArcGIS Engine功能框架
基本服务 数据访问 地图分析
应用层需要用到的 ArcObjects 核心对象 几何图形的操作与显示 地理数据集,矢量,栅格数据
IQueryFilter、 IRaster、IRasterCursor、IRasterDataset、IRelationship、
IReplica、 ISelectionSet、ISurface、ITin、ITopology、 IVersion、
主要类库介绍—GeodataBase
DataSourcesFile
包含了为支持的矢量数据格式提供的工作空间工厂和工作空间。
ICoverageFeatureClass、ICadDrawingLayers、 IGPLayer、 ArcInfoWorkspaceFactory、CadWorkspaceFactory、SDCWorkspaceFactory、 ShapefileWorkspaceFactory、TinWorkspaceFactory、VpfWorkspaceFactory
PageLayoutControl、SceneControl、Snapping、Symbology、
TOCControl、ToolbarControl、ToolbarItem、、、
主要类库介绍—Display
Display
显示库包含了支持在输出设备上显示图形的组件,屏幕显示, 符号,颜色等都在这个库中定义。 BalloonCallout、ScreenDisplay 绘图跟踪器:EngineRotateTracker、EnvelopeTracker、 字体、颜色: RgbColor、CmykColor 点、线、面符号样式:简单符号、图片符号、专题符号 制图表达:RepresentationRule、 符号库:ServerStyleGallery、ServerStyleGalleryItem

优-ArcEngine基础开发教程C#二次开发ArcGis

优-ArcEngine基础开发教程C#二次开发ArcGis
本文由 fxlcoco 编写 ESRI BBS GIS 大讲堂首发
04/04/2011
第 5 页,共 80 页
山东农业大学资源与环境学院
世界有我精彩-【侯志伟】整理
//添加第一个点,不需要设置点的顺序,参数设置为 Type.Missing pMultipoint.AddPoint(pPoint1, ref o, ref o); //添加第二个点,不需要设置点的顺序,参数设置为 Type.Missing pMultipoint.AddPoint(pPoint2, ref o, ref o); ……//添加其他点 2.4.2Segment 几何对象
地理信息系统08-3
2.4.3Path 和 Ring 几何对象 2.4.3.1Path 几何对象 Path 是连续的 Segment 的集合,除了路径的第一个 Segment 和最后一个 Segment 外其余的 Segment 的起始点都 是 前 一 个 Segment 的 终 止 点 , 即 Path 对 象 的 中 的 Segment 不 能 出 现 分 离 , Path 可 以 是 任 意 数 的 Line,CircularArc,EllipticArc 和 BezierCurve 的组合。
一个 Polyline 对象必须满足以下准则: 1.组成 Polyline 对象的所有 Path 对象必须是有效的。 2.组成 Polyline 对象的所有 Path 对象不能重合,相交或自相交。 3.组成 Polyline 对象的多个 Path 对象可以连接与某一点,也可以分离。 4.Path 对象的长度不能为0. IPolyline 是 Polyline 类的主要接口,IPolyline 的 Reshape 方法可以使用一个 Path 对象为一个 Polyline 对象整形, IPolyline 的 SimplifyNetwork 方法用于简化网络。 Polyline 对象可以使用 IGeometryCollection 接口添加 Path 对象的方法来创建,使用该接口需注意以下情况: 1.每一个 Path 对象必须是有效的,或使用 IPath::Simplify 方法后有效。 2.由于 Polyline 是 Path 对象的有序集合,所以添加 Path 对象时必须注意顺序和方向。 3.为了保证 Polyline 是有效的,可以创建完 Polyline 对象后使用 ITopologicalOperator 接口的 Simplify 方法。 以下代码片段为使用 IGeometryCollection 接口创建一个 Polyline 对象:

ArcEngine复习指导

ArcEngine复习指导

GIS开发与应用GIS开发与应用——ArcEngine方法独立开发模式宿主型开发模式(组件式GIS 基本思想)组件式GIS 开发模式第1章GIS 二次开发概述1.1 GIS 开发模式GIS开发与应用——ArcEngine方法1.2 组件式GIS组件式 GIS (ComGIS) :采用了面向对象技术和组件式软件的GIS 系统(包括基础平台和应用系统)。

COM是组件式对象模型是组件式对象模型(Component Object Model) 的英文缩写。

GIS开发模式包括:开发模式包括:独立开发模式、宿主型开发模式、组件式GIS 开发模式。

组件式GIS 开发平台的结构有三种:基础组件、高级通用组件、行业性组件。

GIS开发与应用——ArcEngine方法基础组件——面向空间数据管理,提供基本的交互过程。

面向空间数据管理,提供基本的交互过程。

高级通用组件——面向通用功能。

行业性组件——抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。

GIS开发与应用——ArcEngine方法第二章 ArcEngine 基础2.1 ArcObjects 与ArcEngine 区别与联系2.2 ArcEngine 功能2.4 组件对象模型COM2.5 理解对象模型图OMD2.6 ArcEngine 类库结构GIS开发与应用——ArcEngine方法ArcEngine 从功能层次上分为五部分:1.基本服务—由GIS 核心ArcObjects 构成,几乎所有GIS应用程序都需要,如要素几何体(Feature geometry)和显示(Display)。

2.数据存取—ArcGIS Engine 可以对许多栅格和矢量格式进行存取,包括强大的地理数据库(Geodatabase)。

3.地图表达—创建和显示带有符号和标注的地图。

4.开发组件—用于快速开发应用程序的界面控件。

5.运行时选项—ArcGIS Engine 运行时可以与标准功能或其它高级功能一起部署GIS开发与应用——ArcEngine方法6-72.4.1 基本概念对象和类( Objects and Class )对象:系统中用来描述客观事物的一个实体,构成系统的一个基本单位。

ArcEngineC选择对象取消选择设置可选图层

ArcEngineC选择对象取消选择设置可选图层

ArcEngine C# 选择对象、取消选择、设置可选图层//全局变量public enum enumToolFlag{Select}IEnumFeature globalEnumFeature; // 选中要素集全局变量private void btnSelect_Click(object sender, EventArgs e) //选择对象axMapControlMain.MousePointer= esriControlsMousePointer.esriPointerDefault;flag = enumToolFlag.Select;}在axMapControl1_OnMouseDown中写如下代码:Switch (flag){case enumToolFlag.Select: //选择元素{//选择要素IGeometry pGeometry = axMapControlMain.TrackRectangle(); IEnvelope pEnv;IActiveView pActiveView = axMapControlMain.ActiveView;//IMap pMap = axMapControlMain.Map;pEnv = pGeometry as IEnvelope;if (pEnv.IsEmpty == true){ESRI.ArcGIS.Display.tagRECT r;r.bottom = e.y + 5;r.top = e.y - 5;r.left = e.x - 5;r.right = e.x + 5;pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4);pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;pGeometry = pEnv as IGeometry;}axMapControlMain.Map.ClearSelection();axMapControlMain.Refresh();axMapControlMain.Map.SelectByShape(pGeometry, null, false);axMapControlMain.Refresh();//获取选中要素IMap pMap = axMapControlMain.Map;globalEnumFeature = axMapControlMain.Map.FeatureSelection as IEnumFeature;globalEnumFeature.Reset();}break;}取消选择:private void btnClearSelect_Click(object sender, EventArgs e) //取消选择{axMapControlMain.MousePointer=esriControlsMousePointer.esriPointerDefault;axMapControlMain.Map.ClearSelection();axMapControlMain.Refresh();}设置可选图层://全局变量中添加string selectedlayerName; // 选择图层名private void btnSetSelectLayer_Click(object sender, EventArgs e){try{//初始设置所有图层不可选ILayer iLayer;IFeatureLayer iFeatureLayer;for (int i = 0; i < yerCount; i++){iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = false;}frmSetSelectLayer selectLayerFrm;selectLayerFrm = new frmSetSelectLayer(axMapControlMain); selectLayerFrm.ShowDialog();selectedlayerName = selectLayerFrm.selectedLayerName;if (selectedlayerName == null) return;if (selectedlayerName == "所有图层"){for (int i = 0; i < yerCount; i++){iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = true;}}elseiLayer = Tool.GetLayerByName(selectedlayerName, axMapControlMain); iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = true;}}catch (Exception ex){MessageBoxEx.Show(ex.ToString());}}GetLayerByName函数:public static ILayer GetLayerByName(string strLyrName, AxMapControl axMapControlMain){ILayer pLayer = null;bool bFindLayer = false;for (int i = 0; i < yerCount; i++){pLayer = axMapControlMain.Map.get_Layer(i);if (pLayer is IGroupLayer || pLayer is ICompositeLayer){ICompositeLayer pComLyr = pLayer as ICompositeLayer;for (int j = 0; j < pComLyr.Count; j++) {pLayer = pComLyr.get_Layer(j);if (.Equals(strLyrName)) {bFindLayer = true;break;}else{pLayer = null;}}}else{if ( == strLyrName) {bFindLayer = true;}else{pLayer = null; }}if (bFindLayer) {break;}}return pLayer; }。

ArcGIS Engine中初始化许可常见问题归纳

ArcGIS Engine中初始化许可常见问题归纳

ArcGIS Engine许可初始化关于初始化Engine许可的,其实原理都很简单,大家一般都没有问题,但又往往会因为不够细心加上Engine的“小脾气”,让不少程序员都要在这里犯错。

以Engine9.2为例,应用程序是强制初始化许可,也就是说必须使用LicenseControl或AO 接口初始化许可,否则应用程序无法启动。

Engine9.1未采取强制初始化许可策略,而是应用程序创建时就初始化标准Engine许可。

在一般情况下,我们会用将LicenseControl拖放到主窗体上完成初始化。

但当Engine程序需要使用ArcGIS Engine Enterprise Geodatabase(以下简称GDB Update)许可的时候,我们就往往会由于意识不到应该使用该许可,以及无法正确的初始化该许可而陷入麻烦。

注意:以下所探讨的所有“许可”并不包括扩展模块许可,如三维分析、空间分析和网络分析;而只是包括Engine可使用的Engine标准许可、Engine GDB Update许可、ArcView许可、ArcEditor许可和ArcInfo许可五种。

问题分为三方面:1.什么情况下需要GDB Update许可当需要对SDE里数据进行编辑时,以及需要在SDE和Personal Geodatabase中创建复杂ArcGIS对象时,我们需要使用GDB Update许可。

对SDE里的数据编辑,很好理解,大致就是进行数据插入,删除,更新;对表添加、删除和修改,表结构的变化(添加、删除列)等,因为这些动作都会造成后台数据库的写操作。

对于Personal Geodatabase,进行简单数据对象和编辑,包括创建、删除和修改普通表都是不需要GDB Update许可的,但对于复杂的Geodatabse对象的创建、删除和修改,则需要GDB Update许可,其中复杂的Geodatabse对象包括几何网络,网络分析模型,拓扑,关系类。

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”前面打勾)。

Engine 开发手册(1)

Engine 开发手册(1)
该库还包括大量可以有 ToolbarControl 调用的内置 commands、tools、Menus,它们可以极大地简化二次
开发工作。
◆ Extensions
在图中我们可看出,ArcEngine 的开发体系是一条纵线,功能丰富,层次清晰。最上层的 Extensions 包含
了许多高级开发功能,如 GeoDatabase Update、空间分析、三维分析、网络分析、Schematics 逻辑示意图
ometry 和 Display 等。
◆ Data Acce ss
包含了访问矢量或栅格数据的 GeoDatabase 所有的接口和类组件。
◆ Map Pre sentation
包含了 GIS 应用程序用于数据显示、数据符号化、要素标注和专题图制作等需要的接口和类
组件。
问中。ArcGIS 桌面和 ArcGIS Engine 可以运行在便携式电脑或平板电脑上,用户可以在野外进行数据采集、
分析和乃至制定决策。
ArcGIS Engine 介 绍
ArcGIS Engine 是一组完备的并且打包的嵌入式 GIS 组件库和工具库,开发人员可用来创建新的或扩展已
ArcGIS Engine 开发工具包是一个基于组件的软件开发产品,可用于构建自定义 GIS 和制图应用软件。它
并不是一个终端用户产品,而是软件开发人员的工具包,支持四种开发环境(C++, COM, .NET,以及
Java),适于为 Windows、 UNIX 或 Linux 用户构建基础制图和综合动态 GIS 应用软件。
一ArcGIS介绍 1
1、1ArcGIS Engine 中的类库 5
1、2 和ArcGIS Engine开发相关的C#知识

ArcGIS Engine中IColor、IRGBColor和Win32 Color和.Net中Color相互转换

ArcGIS Engine中IColor、IRGBColor和Win32 Color和.Net中Color相互转换

AE中IColor、IRGBColor和Win32 Color和.Net中Color相互转换1 ArcGIS Engine与.Net中Color互转1.1 将.NET中的Color结构转换至于ArcGIS Engine中的IRgbColor接口''' <summary>''' 将.NET中的Color结构转换至于ArcGIS Engine中的IRgbColor接口''' </summary>''' <param name="pColor">.NET中的System.Drawing.Color结构表示ARGB颜色</param> ''' <returns></returns>''' <remarks></remarks>Public Function ConvertColorToIRgbColor(ByVal pColor As Color) As IRgbColorDim pRgbColor As IRgbColor = New RgbColorpRgbColor.RGB = pColor.B * 65536 + pColor.G * 256 + pColor.RReturn pRgbColorEnd Function#End Region1.2 将.NET中的Color结构转换至于ArcGIS Engine中的IColor接口''' <summary>''' 将.NET中的Color结构转换至于ArcGIS Engine中的IColor接口''' </summary>''' <param name="pColor">.NET中的System.Drawing.Color结构表示ARGB颜色</param> ''' <returns></returns>''' <remarks></remarks>Public Function ConvertColorToIColor(ByVal pColor As Color) As IColorDim pESRIColor As IColor = New RgbColorpESRIColor.RGB = pColor.B * 65536 + pColor.G * 256 + pColor.RReturn pESRIColorEnd Function#End Region1.3 将ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构''' <summary>''' 将ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构''' </summary>''' <param name="pRgbColor">IRgbColor</param>''' <returns>.NET中的System.Drawing.Color结构表示ARGB颜色</returns>''' <remarks></remarks>Public Function ConvertIRgbColorToColor(ByVal pRgbColor As IRgbColor) As ColorReturn ColorTranslator.FromOle(pRgbColor.RGB)End Function#End Region1.4 将ArcGIS Engine中的IColor接口转换至.NET中的Color结构''' <summary>''' 将ArcGIS Engine中的IColor接口转换至.NET中的Color结构''' </summary>''' <param name="pColor">IColor</param>''' <returns>.NET中的System.Drawing.Color结构表示ARGB颜色</returns>''' <remarks></remarks>Public Shared Function ConvertIColorToColor(ByVal pColor As IColor) As Color Return ColorTranslator.FromOle(pColor.RGB) '特别注意此处不能用Color.FromArgb(pColor.RGB),用该函数得到的将是R与B位置相反的颜色值End Function#End Region注:以上代码用编写2 .Net与Win32中的Color互转COLORREF类型颜色的值COLORREF cr=RGB(123,200,12);其中的R、G、B三个分量的排列顺序是BGR。

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

<<ArcGIS Engine+C#实例开发教程>> 第一讲:桌面GIS应用程序框架的建立第二讲菜单的添加及其实现第三讲 MapControl与PageLayoutControl同步 (一)第三讲 MapControl与PageLayoutControl同步 (二)第三讲 MapControl与PageLayoutControl同步 (三)第四讲状态栏信息的添加与实现第五讲鹰眼的实现第六讲右键菜单添加与实现第七讲图层符号选择器的实现第七讲图层符号选择器的实现2第八讲属性数据表的查询显示第九讲图层文本标注教程Bug及优化方案1到第六讲为止已经发现的教程Bug及解决方法如下:1、在第二讲可能会出现变量未定义。

原因:第二讲与第三讲联系紧密,我为控制篇幅才将其分为两讲,某些变量是在第三讲才进行定义,请大家注意。

2、第六讲弹不出TOCControl的右键菜单原因:没有取得m_tocControl的指针,即没有把m_tocControl指针与axTOCControl1控件绑定,导致调用m_menuMap.PopupMenu(e.x, e.y, m_tocControl.hWnd);时m_tocControl.hWnd为NULL,故无法弹出菜单。

解决方法:在Form1_Load()函数中,添加如下代码:m_tocControl = (ITOCControl2)this.axTOCControl1.Object;目前已经发现的优化方案如下:1、教程第四讲,坐标单位前面的esri,原用switch语句逐一替换,其实直接用取子串(Substring)的方法截去更方便。

修改代码如下:CoordinateLabel.Text = " 当前坐标 X = " + e.mapX.ToString() + " Y = " +e.mapY.ToString() + " " + this.axMapControl1.MapUnits.ToString().Substring(4);2、教程第四讲,固定状态栏中的比例尺和当前坐标项目的宽度以防止闪烁。

方法如下:选中状态栏中的比例尺或当前坐标项目,把其autoSize属性设为False,再在Size属性里设置宽度。

经测试,比例尺宽度为150,当前坐标宽度为400比较合适。

第一讲:桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。

最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows 应用程序模板,输入名称“3sdnMap”,点击确定。

在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。

2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。

选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。

选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。

选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。

将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。

点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name 设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。

如下所示。

选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。

选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。

拖入TabControl控件到Panel2,设置Dock属性为Fill。

并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。

选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。

选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。

最后将LicenseControl控件拖入到窗体的任意地方。

按F5编译运行,可以看到刚才布局好的程序界面了。

3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。

分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。

这样,工具条和图层控件就与地图控件关联了。

4、添加工具此时,工具条中还没有任何工具,添加的方法也很简单。

右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。

常见的工具有:Map Navigation中的导航工具,Map Inquiry中的查询工具,Feature Selection中的选择工具,你可以根据需要酌情添加工具。

5、编译运行按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了,效果如开篇所示。

第二讲菜单的添加及其实现在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下。

在“属性”选项卡中,我们当时添加的是DataGridView 控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是 PropertyGrid 控件。

因此请你删除“属性”选项卡中的 DataGridView 控件,再把位于“工具箱 | 所有 Windows 窗体|PropertyGrid ”(如果没有,右击选择“选择项”以添加此控件)控件拖到该选项卡。

在这一讲中,主要讲解菜单的添加和实现。

1、添加菜单在设计视图中,单击菜单栏,会出现“请在此处键入”的提示,单击提示就可以键入菜单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单,如下所示:[img]file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/T emporary%20Internet%20Files/Content.IE5/WVUJQZMD/20090512083746513%5B1%5D.j pg[/img]Tips :每创建一个菜单,请在其属性面板中设置 Name 属性,而且不要为中文,因此 Name 值将是此菜单响应函数的函数名的一部分,带中文的函数名,总是不好吧。

本讲中,我们将添加新建( New )、打开( Open )、添加数据( AddData )、保存( Save )、另存为( SaveAs )、退出( Exit )这些菜单,()内为相应的 Name 属性值。

Tips:你可以在属性面板中的 Text 属性中,把菜单名设置为中英文形式,如“打开O pen ”,带下划线的 O 表示此项菜单的快捷键是字母 O ,设置方法是在相应字母前加上“ & ”字符,如“打开&Open ”。

但这种快捷键只在打开此下拉菜单时才有效,即当你单击“文件”菜单弹出下拉菜单时,按下字母 O 就可以定位到“打开”菜单。

还有一种在程序运行时都有效的全局快捷键,可以在属性面板中的“ ShortCutKeys ”中设置。

你还可以在属性面板中的 Image 属性中设置你喜欢的菜单图标。

单击 Image 那一行右边的按钮,弹出如下菜单。

选择“项目资源文件”,再单击导入就可以选择你的图标了。

最终效果如下所示。

注意,在解决方案面板中,选中刚才添加的所有图标,在其属性面板中将生成操作设置为“嵌入的资源”,这一点很重要!2、实现相关菜单首先定义指针(写在 public partial class Form1 : Form 下面即可):private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null;private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null; private IMapDocument pMapDocument;若以上指针无效,请添加以下引用:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.SystemUI;在设计视图中的属性面板中,选择 Form1 ,即主窗体,单击事件按钮(闪电形状的那个按钮),打到“ Load ”事件并双击,添加此事件。

在 Form1_Load 函数中初始化这些指针:// 取得 MapControl 和 PageLayoutControl 的引用m_mapControl = (IMapControl3)this.axMapControl1.Object;m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;依次双击每个菜单项,添加菜单响应函数。

实现代码如下:/// <summary>/// 新建地图命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void New_Click(object sender, EventArgs e){// 本命令涉及到 MapControl 和 PageLayoutControl 同步问题,将在下一讲中实现}/// <summary>/// 打开地图文档 Mxd 命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Open_Click(object sender, EventArgs e){// 本命令涉及到 MapControl 和 PageLayoutControl 同步问题,将在下一讲中实现}/// <summary>/// 添加数据命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void AddData_Click(object sender, EventArgs e){int currentLayerCount = yerCount;ICommand pCommand = new ControlsAddDataCommandClass();pCommand.OnCreate(this.axMapControl1.Object);pCommand.OnClick();}/// <summary>/// 保存地图文档命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Save_Click(object sender, EventArgs e){// 首先确认当前地图文档是否有效if (null != m_pageLayoutControl.DocumentFilename &&m_mapControl.CheckMxFile(m_pageLayoutControl.DocumentFilename)){// 创建一个新的地图文档实例IMapDocument mapDoc = new MapDocumentClass();// 打开当前地图文档mapDoc.Open(m_pageLayoutControl.DocumentFilename, string.Empty);// 用 PageLayout 中的文档替换当前文档中的 PageLayout 部分mapDoc.ReplaceContents((IMxdContents)m_pageLayoutControl.PageLayout); // 保存地图文档mapDoc.Save(esRelativePaths, false);mapDoc.Close();}}/// <summary>/// 另存为地图文档命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void SaveAs_Click(object sender, EventArgs e){// 调用另存为命令ICommand command = new ControlsSaveAsDocCommandClass();command.OnCreate(m_controlsSynchronizer.ActiveControl);command.OnClick();}/// <summary>/// 退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Exit_Click(object sender, EventArgs e){Application.Exit();}3、编译运行按 F5 编译运行程序。

相关文档
最新文档