ArcGISEngine二次开发――提高篇

合集下载

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

优-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代码效率的方法”连载系列(之一)

“提高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的地理信息系统二次开发原理和方法_金靖

基于ArcGISEngine的地理信息系统二次开发原理和方法_金靖
第 35 卷 第 3 期 2012 年 3 月
测绘与空间地理信息
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 二次开发

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二次开发——提高篇

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的地理信息系统二次开发原理和方法

基于ArcGIS Engine的地理信息系统二次开发原理和方法
器 , OM客 户机 访 问由 C C OM服务 器提 供 的服务 2 Ar GI g ne c S En i A c I n ie是 一 个 基 于 A c bet 构 建 的 可 编程 rG SE gn rO jcs 的嵌入 式 G S工具 包 。基 于 A c I nie开 发 出的 G S I rG SE gn I 应 用 系统最 大 的特点 就是 能够 完全 脱离 A c I rG S软件 系统 。
金 靖
( 湖北省鄂州市勘测院 , 湖北 鄂 州 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

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