实习指导书-第七章--ArcGIS-EngineWord下载.doc
- 文档编号:13112465
- 上传时间:2022-10-05
- 格式:DOC
- 页数:60
- 大小:1.21MB
实习指导书-第七章--ArcGIS-EngineWord下载.doc
《实习指导书-第七章--ArcGIS-EngineWord下载.doc》由会员分享,可在线阅读,更多相关《实习指导书-第七章--ArcGIS-EngineWord下载.doc(60页珍藏版)》请在冰豆网上搜索。
图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.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;
}
}
当鼠标在鹰眼窗体移动时,主窗体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<
map.LayerCount;
i++)
pTempLayer=map.get_Layer(i);
if(pLayer.AreaOfInterest.Width<
pTempLayer.AreaOfInterest.Width)
pLayer=pTempLayer;
returnpLayer;
然后在axMapControl1的OnMapReplaced事件中调用。
privatevoidaxMapControl1_OnMapReplaced(objectsender,IMapControlEvents2_OnMapReplacedEvente)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实习 指导书 第七 ArcGIS Engine