APP下载

基于ArcGISEngine的二次开发功能实现

2019-10-21姜琳琳

写真地理 2019年4期

姜琳琳

摘要:本文的主要内容是通过VisualStudio2012平台,利用C#对ArcEngine进行二次开发,利用其相关组件,实现一个可进行地图基本操作、基于空间位置的地图点击查询、以及简单的缓冲区分析等操作功能的实现。

关键词: Arcgis Engine;信息查询

引言

随着信息科学与GIS技术的飞速发展,GIS已由传统GIS发展到目前普遍使用的组件式GIS(ComGIS)和网络GIS(WebGIS)。组件式GIS的出现解决了传统GIS所面临的诸多问题,它是面向对象技术和构件式软件技术在GIS软件开发中的应用。本文使用ArcObjects下的一个子组件ArcEngine进行二次开发。

1基础功能实现

1.1地图浏览功能

该功能主要包括缩小、全图显示、放大、漫游等。这主要是通过ArcEngine中所提供的ToolbarControl工具条控件进行实现的。也可以代码实现,如下:

放大:

ipEnv=axMapControl1.TrackRectangle();

axMapControl1.Extent=ipEnv;

缩小:

ipEnv=axMapControl1.Extent;

ipEnv.Expand(2,2,true);

axMapControl1.Extent=ipEnv;

平移:

ipEnv=axMapControl1.Extent;

axMapControl1.Pan();

居中

IEnvelopepEnv;

IActiveViewpactive;

pEnv=axMapControl1.Extent;

pactive=axMapControl1.ActiveView;

//居中点的位置

pEnv.CenterAt(pactive.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x,e.y));

pactive.Extent=pEnv;

//刷新

pactive.Refresh();

2信息查询功能

该项主要包括周边影响分析、快速查询和专题查询等功能。

2.1快速查询实现核心代码

IFeatureLayer flyer = axMapControl1.get_Layer(0) as IFeatureLayer;

IFeatureClass feclass = flyer.FeatureClass;

IFeatureCursor cusro = feclass.Search(null, true);

IFeature fea = cusro.NextFeature();

int cnt=0;

while (fea != null)

{

cnt = cnt + 1;

fea = cusro.NextFeature();

}

2.2按照条件属性进行查询

IFeatureLayer flyer = axMapControl1.get_Layer(0) as IFeatureLayer;

IFeatureClass feclass = flyer.FeatureClass;

IQueryFilter flter = new QueryFilterClass();

flter.WhereClause = "KIND='1380'";

IFeatureCursor cusro = feclass.Search(flter, true);

IFeature fea=cusro.NextFeature();

int cnt = 0;

while (fea != null)

{

cnt = cnt + 1;

fea = cusro.NextFeature();

}

3空间分析

空间分析功能是ArcG1S的特点与核心之一。主要利用对象库提供的接口实现诸如缓冲区分析、路网分析等空间分析功能。

3.1缓冲区分析

本程序采用ITopologicalOperator接口中的Buffer方法来创建缓冲区,实现了对单个图层内全部要素进行缓冲区分析和对单个图层内某些选中的要素进行缓冲区分析两大功能。新生成的缓冲面将会以浅黄色在地图窗口中高亮显示,并且系统还会计算出缓冲面的总面积。

核心代码:

IGraphicsContainer graphicscont=axMapControl1.MapasIGraphicsContainer;

IFeatureLayer felyer=axMapControl1.get_Layer(0)asIFeatureLayer;

IFeatureCursor cursor=felyer.FeatureClass.Search(null,true);

IFeature fea=cursor.NextFeature();

IActiveView av=axMapControl1.MapasIActiveView;

while(fea!=null)

{

ITopologicalOperator op=fea.ShapeCopyasITopologicalOperator;

IGeometrybufferresult=op.Buffer(0.01);

IElement ele=new PolygonElementClass();

ele.Geometry=bufferresult;

graphicscont.AddElement(ele,0);

av.Refresh();

fea=cursor.NextFeature();

}

4 結束语

本文主要实现了作为一个地理信息系统最基础的功能、信息查询功能和空间分析功能。并结合比较核心的代码片段,构成本文的主要内容。未来,随着对ArcEngine组件技术的不断深入,研究与探索,使其在社会经济统计、专题地图制作、城市管网等诸多领域都有更广泛的应用。

参考文献:

[1]王穆一雄.基于ArcEngine的可视化系统开发方法研究与应用[D].兰州交通大学,2013.

[2]金靖.基于ArcGIS Engine的地理信息系统二次开发原理和方法[J].测绘与空间地理信息,2012,35(03):46-49.