实习指导书-第七章--ArcGIS-Engine.doc

上传人:b****1 文档编号:181029 上传时间:2022-10-05 格式:DOC 页数:60 大小:1.21MB
下载 相关 举报
实习指导书-第七章--ArcGIS-Engine.doc_第1页
第1页 / 共60页
实习指导书-第七章--ArcGIS-Engine.doc_第2页
第2页 / 共60页
实习指导书-第七章--ArcGIS-Engine.doc_第3页
第3页 / 共60页
实习指导书-第七章--ArcGIS-Engine.doc_第4页
第4页 / 共60页
实习指导书-第七章--ArcGIS-Engine.doc_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

实习指导书-第七章--ArcGIS-Engine.doc

《实习指导书-第七章--ArcGIS-Engine.doc》由会员分享,可在线阅读,更多相关《实习指导书-第七章--ArcGIS-Engine.doc(60页珍藏版)》请在冰豆网上搜索。

实习指导书-第七章--ArcGIS-Engine.doc

第七章ArcGISEngine高级功能开发

6

7

7.1缩略图(鹰眼)

鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。

在本小节中我们将学习如何制作这种鹰眼。

7.1.1添加控件

新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl、两个MapControl和LicenceControl等四个控件。

布局如下图所示。

左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。

图1界面布局

在ToolbarControl加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。

图2添加按钮

7.1.2代码添加及解释

鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。

当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。

下面开始实现鹰眼功能,添加usingESRI.ArcGIS.Carto、usingESRI.ArcGIS.Geometry、

usingESRI.ArcGIS.Display三个引用。

首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:

privatevoidaxMapControl1_OnExtentUpdated(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvente)

{

//创建鹰眼中线框

IEnvelopepEnv=(IEnvelope)e.newEnvelope;

IRectangleElementpRectangleEle=newRectangleElementClass();

IElementpEle=pRectangleEleasIElement;

pEle.Geometry=pEnv;

//设置线框的边线对象,包括颜色和线宽

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Green=0;

pColor.Blue=0;

pColor.Transparency=255;

//产生一个线符号对象

ILineSymbolpOutline=newSimpleLineSymbolClass();

pOutline.Width=2;

pOutline.Color=pColor;

//设置颜色属性

pColor.Red=255;

pColor.Green=0;

pColor.Blue=0;

pColor.Transparency=0;

//设置线框填充符号的属性

IFillSymbolpFillSymbol=newSimpleFillSymbolClass();

pFillSymbol.Color=pColor;

pFillSymbol.Outline=pOutline;

IFillShapeElementpFillShapeEle=pEleasIFillShapeElement;

pFillShapeEle.Symbol=pFillSymbol;

//得到鹰眼视图中的图形元素容器

IGraphicsContainerpGra=axMapControl2.MapasIGraphicsContainer;

IActiveViewpAv=pGraasIActiveView;

//在绘制前,清除axMapControl2中的任何图形元素

pGra.DeleteAllElements();

//鹰眼视图中添加线框

pGra.AddElement((IElement)pFillShapeEle,0);

//刷新鹰眼

pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);

}

当鼠标点击鹰眼窗体时,主窗体Extent随之改变。

在axMapControl2的OnMouseDown事件中添加代码如下:

privatevoidaxMapControl2_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)

{

if(this.axMapControl2.Map.LayerCount!

=0)

{

//按下鼠标左键移动矩形框

if(e.button==1)

{

IPointpPoint=newPointClass();

pPoint.PutCoords(e.mapX,e.mapY);

IEnvelopepEnvelope=this.axMapControl1.Extent;

pEnvelope.CenterAt(pPoint);

this.axMapControl1.Extent=pEnvelope;

this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

}

//按下鼠标右键绘制矩形框

elseif(e.button==2)

{

IEnvelopepEnvelop=this.axMapControl2.TrackRectangle();

this.axMapControl1.Extent=pEnvelop;

this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

}

}

}

当鼠标在鹰眼窗体移动时,主窗体Extent随之改变。

在axMapControl2的OnMouseMove事件中添加代码如下:

privatevoidaxMapControl2_OnMouseMove(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvente)

{

//如果不是左键按下就直接返回

if(e.button!

=1)return;

IPointpPoint=newPointClass();

pPoint.PutCoords(e.mapX,e.mapY);

this.axMapControl1.CenterAt(pPoint);

this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

}

下面代码用于实现axMapControl2与axMapControl1的数据的同步更新,获取主视图中视图范围最大的图层作为鹰眼中的视图。

这个更新由两部分组成,一个是对axMapControl1添加地图文档(mxd文件)的响应,通过axMapControl1的OnMapReplace事件实现,一个是对axMapControl1添加单个图层的响应,通过axMapControl1的OnFullExtentUpdated事件实现。

我们获取主视图中的视图范围最大的图层写成一个独立的函数,方便调用。

privateILayerGetOverviewLayer(IMapmap)

{

//获取主视图的第一个图层

ILayerpLayer=map.get_Layer(0);

//遍历其他图层,并比较视图范围的宽度,返回宽度最大的图层

ILayerpTempLayer=null;

for(inti=1;i

{

pTempLayer=map.get_Layer(i);

if(pLayer.AreaOfInterest.Width

pLayer=pTempLayer;

}

returnpLayer;

}

然后在axMapControl1的OnMapReplaced事件中调用。

privatevoidaxMapControl1_OnMapReplaced(objectsender,IMapControlEvents2_OnMapReplacedEvente)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1