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信息系统中构建面板,并在面板上放入各种可视化控件,满足对空间数据的管理和空间数据分析需求。
优-ArcEngine基础开发教程C#二次开发ArcGis
pLine.PutCoords(pPoint1,pPoint2); //QI 到 ISegment
ISegment pSegment= pLine as ISegment; //创建一个 Path 对象
SegmentCollection pPath= new PathClass();
object o=Type.Missing; //通过 ISegmentCollection 接口为 Path 对象添加 Segment 对象
04/04/2011
本文由 fxlcoco 编写 ESRI BBS GIS 大讲堂首发 第 1 页,共 80 页
山东农业大学资源与环境学院
世界有我精彩-【侯志伟】整理
地理信息系统08-3
可以看到在 Visual Studio 中看到在新创建的项目中自动加载了 ToolBarControl、TocControl、LicenseControl、 MapControl 四个 ArcGIS Engine 控件以及一个.NET ToolStripMenuItem 菜单控件,如图 3 所示:
pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); 2.4.4.2Polylgon 几何对象
2Polylgon 对象是由一个或多个 Ring 对象的有序集合,它可以是由单个 Ring 对象构成,也可以使用多个 Ring 组成如下图所示。其中 Ring 可以分为 Outer Ring(外环)和 Inner Ring(内环)之分。外环和内环都是有方向的, 它们的区别是外环的方向是顺时针的,内环的方向是逆时针。Polygon 通常用来代表有面积的多边形矢量对象, 如行政区,建筑物等。
04/04/2011
“提高ArcGIS Engine代码效率的方法”连载系列(之一)
“提高ArcGIS Engine代码效率的方法”连载系列(之一)公司现在涉及到GIS的项目很多,在这些项目中,有很多一部分采用了ArcGIS的相关产品,也出现了很多性能上的问题。
其实,在对ArcGIS系列产品进行编程的时候,有很多方法可以让自己的程序跑的更快,性能更好。
本文将以连载的形式,列举这些提高性能的方法。
一、GetFeature和GetFeatures的区别在对Feature进行查找的时候,我们往往使用GetFeature。
殊不知,GetFeature对于GeoDatabase的访问是比较慢的,尤其是在有一系列Feature进行查找的时候。
当需要查找的Feature在10个以下时,利用循环的方式GetFeature和直接GetFeatures的效率是差不多的。
但一旦超过10个Feature需要查找时,效率就体现出来了。
当数据量达到100时,采用后者查找的时间是前者的10分之一;而当数据量达到1000个的时候,采用后者查找的时间是前者的20分之一。
比较以下代码:1、GetFeatureprivate static void GetFeatureExample(IFeatureClass featureClass, int[] oidList){int nameFieldIndex =featureClass.FindField("NAME");foreach (int oid in oidList){IFeature feature = featureClass.GetFeature(oid);Console.WriteLine("NAME: {0}", feature.get_Value(nameFieldIndex));}}2、GetFeaturesprivate static void GetFeaturesExample(IFeatureClass featureClass, int[] oidList){int nameFieldIndex = featureClass.FindField("FIPSSTCO");using(ComReleaser comReleaser = new ComReleaser()){IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass();IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(featureClass, ref oidList, true);comReleaser.ManageLifetime(featureCursor);IFeature feature = null;while ((feature = featureCursor.NextFeature()) != null){Console.WriteLine("NAME: {0}", feature.get_Value(nameFieldIndex));}}}可以看到,代码的差别并不是很大,但带来的效果却非常显著。
基于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 开发实例
arcgis 二次开发
gis的开发方法有三种,即独立开发,宿主型二次开发,基于gis组件的二次开发,其中独立开发为底层开发,不依赖于任何gis工具软件,开发难度太大,后两者是基于一种软件的二次开发,这样的二次开发则相对较简单,他的好处也是显而易见的。
宿主型二次开发是指基于GIS平台软件上进行应用系统开发。
大多数GIS平台软件都提供了可供用户进行二次开发的脚本语言,如ESRI的ArcView提供了Avenue语言,Maplnfo公司的MapInfo Professional提供了MapBasic语言等等。
用户可以利用这些脚本语言,以原GIS软件为开发平台,开发出自己的针对不同应用对象的应用程序。
这种方式省时省心,但进行二次开发的脚本语言,作为编程语言,功能极弱,用它们来开发应用程序仍然不尽如人意,并且所开发的系统不能脱离GIS平台软件,是解释执行的,效率不高。
相比基于组件的二次开发可以根据自己的需要扩展系统的功能,并且可以脱离原gis平台软件,综合看来,单纯二次开发受gis基础平台提供的编程语言的限制,而基于组件式的二次开发不仅能提高开发效率,同时可靠性好,易于移植,便于维护。
所以,结合gis基础平台软件与当今可视化开发语言的组件式二次开发成为gis开发的主流。
但是二次开发也不是十全十美的,只要我们使其中的瑕疵减少,误差也就会减少。
ArcGIS Engine开发工具包是一个基于组件的软件开发产品,用于建立和部署自定义GIS和制图应用程序。
ArcGIS Engine开发工具包不是一个终端用户产品,而是一个应用程序开发人员的工具包。
可以用ArcGIS Engine开发工具包建立基本的地图浏览器或综合、动态的GIS编辑工具。
使用ArcGIS Engine开发工具包,开发人员在建立定制的地图接口方面具有前所未有的灵活性。
开发人员可以使用几个API中的任何一个来建立独一无二的应用程序,或者将ArcGIS Engine组件与其他软件组件组合起来实现地图与用户管理信息之间的协同关系。
ArcGIS_Engine二次开发——提高篇
ArcGIS Engine二次开发——提高篇1缩略图(鹰眼)鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。
在本小节中我们将学习如何制作这种鹰眼。
1.1添加控件新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。
布局如下图所示。
左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。
图 1 界面布局在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。
图2添加按钮1.2代码添加及解释鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。
当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。
下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三个引用。
首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:private void axMapControl1_OnExtentUpdated(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e){//创建鹰眼中线框IEnvelope pEnv = (IEnvelope)e.newEnvelope;IRectangleElement pRectangleEle = new RectangleElementClass();IElement pEle = pRectangleEle as IElement;pEle.Geometry = pEnv;//设置线框的边线对象,包括颜色和线宽IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255;// 产生一个线符号对象ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 2;pOutline.Color = pColor;// 设置颜色属性pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 0;// 设置线框填充符号的属性IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;// 得到鹰眼视图中的图形元素容器IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;IActiveView pAv = pGra as IActiveView;// 在绘制前,清除axMapControl2 中的任何图形元素pGra.DeleteAllElements();// 鹰眼视图中添加线框pGra.AddElement((IElement)pFillShapeEle, 0);// 刷新鹰眼pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}当鼠标点击鹰眼窗体时,主窗体Extent随之改变。
基于ArcGIS Engine的地理信息系统二次开发原理和方法
金 靖
( 湖北省鄂州市勘测院 , 湖北 鄂 州 4 60 ) 3 0 0
摘
要 : rGSE g e A c I9中新增 的两个突 出产品之一 , 为面 向对 象的嵌入 式 GS Ac I n n Ac I ni 是 rGS n 作 I , rGSE g e能用 i
来在一个组织 内建 立应 用 , 为用户提供 有针 对性的 G S功能。它 包含一 个构 建定制应 用的开发 包 , I 使得 进行 GS I 应用开发时彻 底脱 离 了A c I 面平 台, r S桌 G 方便 了地理信 息的开发 , 大大节约 了开发成 本。本 文结合 某大 学校 也
作, 这些 操作 定 义 了某 种 行 为 , 这组 操 作 的 规 范 , 即 而非
地理 信息 系统详 细介 绍其 具体 开发方 式 。
3 1 加 载 A c I 件 . rGS控
1 启动 Vsa Bs , 新 建工程 中新 建一个 工程 ; ) i l ai 并从 u c 2 将工 程命 名为 “ 大学校 园地 理信 息 系统 ” ) 某 并选 择
靖 (9 3 ) 女 , 1 6 一 , 湖北鄂 州 人 , 级工 程师 , 高 学士 , 主要 从事 测绘 生产 的技 术 与管理 工作 。
第 3期
优-ArcEngine基础开发教程C#二次开发ArcGis
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 对象:
最新ArcGISEngine开发2
IMapControl2定义控制控件外观界面的各种属性和方法。 如Appearance、BorderStyle 和BackColor。它定义的 主要方法有TrackLine、 TrackPolygon、 TrackRectangle和TrackCircle。
一个简单的应用程序 (1)创建一个新的工程 (2)添加控件及引用 (3)窗体上添加控件,编写代码(地图) (4)设置ToolbarControl 与MapControl控件关联 (5)运行程序
(1)创建一个新的工程 启动Visual ,从“新建项目”对话框中创建一
个新的Visual C#“Windows应用程序”项目,并设置项目 名称为“Sample”,选择位置保存该项目。
GlobeControl通过对象接口来操作IGlobe视图,用户可 以通过IGlobeViewer对象来操作ArcGlobe应用程序。
框架控件介绍
图层树控件(TOCControl) TOCControl用来管理图层的可见性和标签的编辑。
TOCControl需要一个“伙伴控件”一起工作, “伙伴控 件”可以是一个MapControl、 PageLayoutControl、 ReaderControl、SceneControl或者是GlobeControl。 “伙伴控件”能够在设计的时候通过ToolbarControl的 属性页设置。或者在程序运行中通过SetBuddyControl 方法来设置。 “伙伴控件”都实现了ITOCBuddy接口。 TOCControl 利用“伙伴控件”来显示交互性的树结构目录,包括“伙 伴控件”的地图、图层、符号等内容。
基于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⼆次开发:从⼊门到精通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第一章 二次开发概述
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桌面应用框架或对话框 需要许可授权
通过代码或应用工具配置
实习指导书_第五章_ArcGIS Engine二次开发入门
第五章ArcGIS Engine二次开发入门5.1 ArcGIS、ArcObjects和ArcGIS Engine简介5.1.1 ArcGIS简介ArcGIS提供了一个可伸缩的框架,可以为独立用户或者多用户,既可以在桌面端也可以在服务器端提供GIS。
ArcGIS 9是用来构建一个完整GIS应用的GIS软件产品集成。
它是基于共享的GIS软件组件——ArcObjects。
ArcGIS 9由以下四部分组成:●ArcGIS Desktop——高级GIS应用的集成●ArcGIS Engine——根据应用程序接口来构建基本应用的嵌入式GIS组件库●ArcGIS Server——在企业级或者网络框架下构建服务器端GIS应用的平台,用来构建Web服务和Web应用●ArcIMS——通过公开的因特网协议来发布地图、数据和元数据的GIS Web服务器图 1 ArcGIS产品结构图每一个GIS框架同样包含ArcSDE网关,这是在关系数据库(RDBMS)上组织地理数据的接口。
ArcGIS是构建地理信息系统的平台。
ArcGIS 9在地理数据处理、3D可视化表达和开发工具方面做了新的扩展。
两个新的产品——ArcGIS Engine和ArcGIS Server在这个版本中发布,是ArcGIS成为一个应用程序及服务端开发的完整产品。
●使用ArcGIS能够开发出一系列的产品,开发者可以:●配置/定制ArcGIS的应用,例如ArcMap和ArcCatalog●扩展ArcGIS的结构和数据模型●利用ArcGIS Engine在其他应用程序中嵌入地图和GIS功能●使用ArcGIS Engine构建并部署桌面版应用程序●使用ArcGIS Server构建Web服务和应用ArcGIS系列产品是通过称之为ArcObjects的软件组件加以构建和扩展的。
ArcObjects 包括一系列不同的程序组件,从高度封装的组件(例如独立的geometry objects)到低级组件(例如能够同已有的ArcMap文档集成的地图组件)。
ArcGis__Engine_二次开发教程
基于.net的ArcGIS Engine介绍-类库
1、SystemUI类库 2、Geometry类库 3、Display类库 4、Server类库 5、。。。
.NET平台概述
.NET开发平台包括.NET Framework 和 Visual 。 Visual 是一套完整的开发工具, 用于生成ASP Web应用程序、Web Services 、桌面应用程序和移动应用 程序。 .NET Framework是生成、部署和运行 Web服务及应用程序的平台。其具有两 个主要组件:通用语言运行时 (Common Language Runtime ) 和.NET Framework类库。
2、COM是开发软件组件的一种方法。
ArcGIS Engine介绍-体系结构
Arc Engine功能层次上由以下五 个组成部分:
• 基本服务:由GIS核心Arc Objects构成,如要素几 何体和显示。 • 数据存取:Arc Engine可以对许多栅格和矢量格式 进行存取,包括强大而灵活的地理数据库。 • 地图表达:包括用于创建和显示带有符号体系和标 注功能的地图的Arc Objects,以及包括创建自定 义应用程序的专题图功能的Arc Objects。 • 开发组件:用于快速应用程序开发的高级用户接口 控件和用于高效开发的一个综合帮助系统。 • 运行时选项:Arc Engine运行时可以与标准功能或 其他高级功能一起部署。
第一章 开发基础
制作人:邱洪钢 2010年2月
目录
一、组件对象模型 二、ArcGIS Engine介绍
三、.NET平台概述
四、 基于.NET的ArcGisEngine的开发 五、本章小结
组件对象模型
1、COM,即组件对象模型,是关于
优-ArcEngine基础开发教程C#二次开发ArcGis
优-ArcEngine基础开发教程C#二次开发ArcGisArcGIS Engine基础开发教程(1)——创建第一个ArcGIS Engine 桌面应用程序1创建第一个ArcGIS Engine桌面应用程序ArcGIS Engine9.3提供了丰富的GIS组件方便用户快速的定制开发一个GIS应用程序,无需写代码即可实现GIS 数据加载,地图操作等功能甚至可以实现高级编辑以及空间分析功能。
接下来使用ArcGIS Engine9.3提供了MapControl Application模块来创建第一个ArcGIS Engine桌面应用程序,并为桌面应用应用程序提供编辑功能。
1.1目标1.创建第一个ArcGIS Engine桌面应用程序2.为应用程序添加编辑功能。
1.2准备工作1 .IDE:Visual Studio 2005/2008 2. ArcGIS Engine Developer kit 9.3 3. 制作ArcGIS实验数据地图文档MXD 1.3设计流程图1.4制作地图文档在ArcMap中加载数据后,点击保存生成一个*.mxd地图文档,如图1所示:1.5创建第一个ArcGIS Engine桌面应用程序在Visual Studio2008中新创建项à选择àArcGISàEngineàMapControl Application,点击确定,如图2所示:可以看到在Visual Studio中看到在新创建的项目中自动加载了ToolBarControl、T ocControl、LicenseControl、MapControl四个ArcGIS Engine控件以及一个.NET ToolStripMenuItem菜单控件,如图3所示:1.6加载MXD地图文档数据单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD 地图文档,如图4所示:可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl提供的常用GIS 功能如:放大,缩小,信息查询等功能。
ArcGIS Engine二次开发文档
1.1简单的A rcGIS Engine地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。
并介绍MapControl、ToolbarControl、TOCControl的应用,1.1.1创建一个新的工程首先打开Microsoft Visual Studio 2010,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个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”前面打勾)。
ArcGISEngine二次开发——提高篇
ArcGIS Engine二次开发——提高篇1缩略图(鹰眼)鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。
在本小节中我们将学习如何制作这种鹰眼。
1.1添加控件新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。
布局如下图所示。
左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。
图 1 界面布局在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。
图2添加按钮1.2代码添加及解释鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。
当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。
下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三个引用。
首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:private void axMapControl1_OnExtentUpdated(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e){//创建鹰眼中线框IEnvelope pEnv = (IEnvelope)e.newEnvelope;IRectangleElement pRectangleEle = new RectangleElementClass();IElement pEle = pRectangleEle as IElement;pEle.Geometry = pEnv;//设置线框的边线对象,包括颜色和线宽IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255;// 产生一个线符号对象ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 2;pOutline.Color = pColor;// 设置颜色属性pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 0;// 设置线框填充符号的属性IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;// 得到鹰眼视图中的图形元素容器IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;IActiveView pAv = pGra as IActiveView;// 在绘制前,清除axMapControl2 中的任何图形元素pGra.DeleteAllElements();// 鹰眼视图中添加线框pGra.AddElement((IElement)pFillShapeEle, 0);// 刷新鹰眼pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}当鼠标点击鹰眼窗体时,主窗体Extent随之改变。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IEnvelope pEnvelope=this .axMapControl1.Extent; pEnvelope.CenterAt(pPoint);
this .axMapControl1.Extent=pEnvelope;
this .axMapControl1.ActiveView.PartialRefresh( esriViewDrawPhase .esriViewGeography,
ESRI.ArcGIS.Controls. IMapControlEvents2_OnMouseDownEvent e)
{
if (this yerCount!=0)
{
//按下鼠标左键移动矩形框
if (e.button== 1)
{
IPoint pPoint=new PointClass();
IActiveView pAv=pGra as IActiveView;
//在绘制前,清除axMapControl2中的任何图形元素
pGra.DeleteAllElements();
//鹰眼视图中添加线框
pGra.AddElement(( IElement )pFillShapeEle,0);
//刷新鹰眼
下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、
using ESRI.ArcGIS.Display三个引用。首先在axMapControll中视图范围改变时鹰眼窗体要做
出对应的响应,即绘制线框并显示,在OnExtentUpdated事件 中添加代码如下:private void axMapControl1_OnExtentUpdated( object sender,
IFillShapeElement pFillShapeEle=pEle as IFillShapeElement;
pFillShapeEle.Symbol=pFillSymbol;
//得到鹰眼视图中的图形元素容器
IGraphicsContainer pGra=axMapControl2.Map as IGraphicsContainer;
图1界面布局
在ToolbarControl加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。
图2添加按钮
1.2
鹰眼用来显示主窗体当前视图范围在全景视图中的位置, 在ArcMap中使用一个线框在 鹰眼视图中标识。 当主视图中的视图范围改变时, 鹰眼中的线框随之改变, 当拖动鹰眼视图 中的红线框时,主视图中的视图范围也随之改变。
}
}
}
当鼠标在鹰眼窗体移动时, 主窗体Extent随之改变。 在axMapControl2的 事件中添加代码如下:
private void axMapControl2_OnMouseMove( object sender,
ESRI.ArcGIS.Controls. IMapControlEvents2_OnExtentUpdatedEvent e)
{
//创建鹰眼中线框
IEnvelope pEnv= (IEnvelope )e.newEnvelope;
IRectangleElement pRectangleEle=new RectangleElementClass();
IElement pEle=pRectangleEle as IElement;
pEle.Geometry=pEnv;
//设置线框的边线对象,包括颜色和线宽
IRgbColor pColor=new RgbColorClass();
pColor.Red= 255;
pColor.Green= 0;
pColor.Blue= 0;
pAv.PartialRefresh( esriViewDrawPhase .esriViewGraphics, null, null);
}
当鼠标点击鹰眼窗体时,主窗体Extent随之改变。在axMapControl2的 事件中添加代码如下:
private void axMapControl2_OnMouseDown( object sender,
pColor.Transparency= 255;
//产生一个线符号对象
ILineSymbol pOutline=new SimpleLineSymbolClass();
pOutline.Width= 2;
pOutline.Color=pColor;
//设置颜色属性
pColor.Red= 255;
pColor.Green= 0;
}
//按下鼠标右键绘制矩形框
else if (e.button== 2)
{
IEnvelope pEnvelop=this .axMapControl2.TrackRectangle();
this .axMapControl1.Extent=pEnvelop;
this esh( esriViewDrawPhase .esriViewGeography,
ArcGIS Engine二次开发
——提高篇
1
鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地 图的范围。在本小节中我们将学习如何制作这种鹰眼。
1.1
新建一个C#.Net项目,项目名称为OverView,将Forml的名字设置为Mai nF orm,并
添加ToolbarControl、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。
pColor.Blue= 0;
pColor.Transparency= 0;
//设置线框填充符号的属性
IFillSymbol pFillSymbol=new SimpleFillSymbolClass();
pFillSymbol.Color=pColor;
pFillSymbol.Outline=pOutline;