姜琳琳
摘要:本文的主要內(nèi)容是通過VisualStudio2012平臺,利用C#對ArcEngine進行二次開發(fā),利用其相關(guān)組件,實現(xiàn)一個可進行地圖基本操作、基于空間位置的地圖點擊查詢、以及簡單的緩沖區(qū)分析等操作功能的實現(xiàn)。
關(guān)鍵詞: Arcgis Engine;信息查詢
引言
隨著信息科學(xué)與GIS技術(shù)的飛速發(fā)展,GIS已由傳統(tǒng)GIS發(fā)展到目前普遍使用的組件式GIS(ComGIS)和網(wǎng)絡(luò)GIS(WebGIS)。組件式GIS的出現(xiàn)解決了傳統(tǒng)GIS所面臨的諸多問題,它是面向?qū)ο蠹夹g(shù)和構(gòu)件式軟件技術(shù)在GIS軟件開發(fā)中的應(yīng)用。本文使用ArcObjects下的一個子組件ArcEngine進行二次開發(fā)。
1基礎(chǔ)功能實現(xiàn)
1.1地圖瀏覽功能
該功能主要包括縮小、全圖顯示、放大、漫游等。這主要是通過ArcEngine中所提供的ToolbarControl工具條控件進行實現(xiàn)的。也可以代碼實現(xiàn),如下:
放大:
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快速查詢實現(xiàn)核心代碼
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的特點與核心之一。主要利用對象庫提供的接口實現(xiàn)諸如緩沖區(qū)分析、路網(wǎng)分析等空間分析功能。
3.1緩沖區(qū)分析
本程序采用ITopologicalOperator接口中的Buffer方法來創(chuàng)建緩沖區(qū),實現(xiàn)了對單個圖層內(nèi)全部要素進行緩沖區(qū)分析和對單個圖層內(nèi)某些選中的要素進行緩沖區(qū)分析兩大功能。新生成的緩沖面將會以淺黃色在地圖窗口中高亮顯示,并且系統(tǒng)還會計算出緩沖面的總面積。
核心代碼:
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 結(jié)束語
本文主要實現(xiàn)了作為一個地理信息系統(tǒng)最基礎(chǔ)的功能、信息查詢功能和空間分析功能。并結(jié)合比較核心的代碼片段,構(gòu)成本文的主要內(nèi)容。未來,隨著對ArcEngine組件技術(shù)的不斷深入,研究與探索,使其在社會經(jīng)濟統(tǒng)計、專題地圖制作、城市管網(wǎng)等諸多領(lǐng)域都有更廣泛的應(yīng)用。
參考文獻:
[1]王穆一雄.基于ArcEngine的可視化系統(tǒng)開發(fā)方法研究與應(yīng)用[D].蘭州交通大學(xué),2013.
[2]金靖.基于ArcGIS Engine的地理信息系統(tǒng)二次開發(fā)原理和方法[J].測繪與空間地理信息,2012,35(03):46-49.