axMapControl1.Extent = axMapControl1.TrackRectangle(); //刷新地图
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null);
null,
?移动地图
在MapControl中可以利用pan()方法来移动其中的地图。在MapControl控件的OnMouseDown事件中,添加如下代码,可实现地图移动。
axMapControl1.Pan();
?在MapControl控件中绘制图形
绘制图形包括绘制点、线、面和标注等。下面举例说明绘制点、线、面图形和标注的方法,别的图形的绘制将在后续章节中介绍。
(1)绘制点
IMap pMap;
IActiveView pActiveView; pMap = axMapControl1.Map;
pActiveView = pMap as IActiveView; //新建点对象 IPoint pPt;
pPt = new PointClass(); pPt.PutCoords(e.mapX, e.mapY); //产生一个Marker元素
IMarkerElement pMarkerElement;
pMarkerElement = new MarkerElementClass(); //产生修饰Marker元素的symbol ISimpleMarkerSymbol pMarkerSymbol;
pMarkerSymbol = new SimpleMarkerSymbolClass(); //设置符号颜色 IRgbColor pColor;
pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60;
pMarkerSymbol.Color = pColor;//需要由用户动态设定 //设置符号大小
pMarkerSymbol.Size = 2; //设置符号类型
pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;//点符号也应该由用户动态选择
IElement pElement;
pElement = pMarkerElement as IElement;
//得到Element的接口对象,用于设置元素的Geometry pElement.Geometry = pPt;
pMarkerElement.Symbol = pMarkerSymbol; IGraphicsContainer pGraphicsContainer;
pGraphicsContainer = pMap as IGraphicsContainer; //将元素添加到Map中
pGraphicsContainer.AddElement(pMarkerElement as IElement, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
(2)绘制线
IMap pMap;
IActiveView pActiveView; pMap = axMapControl1.Map;
pActiveView = pMap as IActiveView; IPolyline pPolyline;
pPolyline = axMapControl1.TrackLine() as IPolyline; //产生一个SimpleLineSymbol符号 ISimpleLineSymbol pSimpleLineSym;
pSimpleLineSym = new SimpleLineSymbolClass();
pSimpleLineSym.Style = esriSimpleLineStyle.esriSLSSolid;//需要用户动态选择 //设置符号颜色 IRgbColor pColor;
pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60;
pSimpleLineSym.Color = pColor;//需要用户动态选择 pSimpleLineSym.Width = 1; //产生一个PolylineElement对象 ILineElement pLineEle;
pLineEle = new LineElementClass(); IElement pEle;
pEle = pLineEle as IElement; pEle.Geometry = pPolyline; //将元素添加到Map对象之中
IGraphicsContainer pGraphicsContainer;
pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
(3)绘制面
IMap pMap;
IActiveView pActiveView; pMap = axMapControl1.Map;
pActiveView = pMap as IActiveView; IPolygon pPolygion;
pPolygion = axMapControl1.TrackPolygon() as IPolygon; //产生一个SimpleFillSymbol符号
ISimpleFillSymbol pSimpleFillSym;
pSimpleFillSym = new SimpleFillSymbolClass();
pSimpleFillSym.Style = esriSimpleFillStyle.esriSFSDiagonalCross;//需要用户动态选择 //设置符号颜色 IRgbColor pColor;
pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60;
pSimpleFillSym.Color = pColor;//需要用户动态选择 //产生一个PolygonElement对象 IFillShapeElement pPolygonEle;
pPolygonEle = new PolygonElementClass(); pPolygonEle.Symbol = pSimpleFillSym; IElement pEle;
pEle = pPolygonEle as IElement; pEle.Geometry = pPolygion; //将元素添加到Map对象之中
IGraphicsContainer pGraphicsContainer;
pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
(4)地图标注
IMap pMap;
IActiveView pActiveView; pMap = axMapControl1.Map;
pActiveView = pMap as IActiveView; ITextElement pTextEle; IElement pEles;
//建立文字符号对象,并设置相应的属性 pTextEle = new TextElementClass();
pTextEle.Text = \西安科技大学\;//需要动态设定 pEles = pTextEle as IElement; //设置文字字符的几何形体属性 IPoint pPoint;
pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); pEles.Geometry = pPoint; //添加到Map对象中,并刷新显示
IGraphicsContainer pGraphicsContainer;
pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEles, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
2.1.4 数据选择
在MapControl控件中,可以使用SearchByshape方法来构造一个基于Map的选择集。它可以选择控件中所有处于选择范围内的要素。在地图控件的OnMouseDown事件中添加下列代码,可以实现数据选择:
//得到一个Envelope对象 IEnvelope pEnv;
pEnv = axMapControl1.TrackRectangle(); //新建选择集环境对象
ISelectionEnvironment pSelectionEnv;
pSelectionEnv = new SelectionEnvironmentClass(); //改变选择集的默认颜色 //设置符号颜色 IRgbColor pColor;
pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60;
pSelectionEnv.DefaultColor = pColor; //选择要素,并将其放入选择集
axMapControl1.Map.SelectByShape(pEnv, pSelectionEnv, false);
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
利用上述方法选择的选择集,可以采用如下方法进行清除:
axMapControl1.Map.Clearselection(); axMapControl.ActiveView.Refresh();
上述多种与地图控件交互的操作,可以封装在类的公共静态方法之中。在定义公共方法时,需要设置的参数包括地图控件的对象,IMapControlEvents2_OnMouseDownEvent的对象,以及用户选择的操作类型。在主窗体地图控件的OnMouseDown事件中,调用该方法,并传入相应的参数即可。
2.1.5 实现鹰眼功能
绝大部分的GIS软件都能看到鹰眼窗口,利用鹰眼窗口,用户可以非常很直观地看到主视图中的地图范围在整个地图范围内的位置。下面将讲述如何实现鹰眼功能,其基本思路如下:
(1)窗体控件布局,需要两个MapControl控件,一个作为主视图,一个作为鹰眼视图。 (2)让主视图和鹰眼视图两个控件中显示的数据保持一致。
(3)主视图中当前显示的地图范围,需用一个红色矩形框在鹰眼视图中标绘出来。当主视图显示的地图范围发生变化,红色矩形框的位置也要发生变化。
(4)当用户用鼠标在鹰眼视图中移动或改变标识主视图中地图范围的红色矩形框的位置和大小时,主视图的地图范围也要发生相应变化。
当主视图中的地图发生变换化时,鹰眼视图中的地图也要发生变化。为此,在axMapControl1的OnMapReplaced事件中添加下列代码,使主视图和鹰眼视图中的数据保持一致。
IMap pMap;
pMap=axMapControl1.Map;
for(int i=0;i axMapControl2.Map.AddLayer(pMap.get_Layer(i)); } //使鹰眼视图中显示加载地图的全图 axMapControl2.Extent=axMapControl2.FullExtent; //使鹰眼视图中显示加载地图的全图 在鹰眼视图中移动红色矩形框时,主视图中的地图范围要发生相应的变换,包括范围变化和位置移动。需要鹰眼视图的OnMouseDown事件中添加下列代码: if (e.button == 1)//探测鼠标左键 { IPoint pPt = new PointClass(); pPt.X = e.mapX; pPt.Y = e.mapY; IEnvelope pEnvelope = axMapControl1.Extent as IEnvelope; pEnvelope.CenterAt(pPt); axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } else if (e.button == 2)//鼠标右键按下 { IEnvelope pEnvelope = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } 上述代码的功能是,利用鼠标左键移动鹰眼视图中的红色矩形框,主视图中显示的范围要进行刷新。用鼠标右键在鹰眼视图中改变红色矩形框的大小,主视图中显示的地图数据也要进行刷新。 在axMapControl2的OnMouseMove事件中添加如下代码: if (e.button != 1) return; IPoint pPt = new PointClass(); pPt.X = e.mapX; pPt.Y = e.mapY; axMapControl1.CenterAt(pPt); axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null); null, 主视图的范围发生变化时,会触发控件的OnExtentUpdated事件,绘制鹰眼图中的红色方框应放在主视图的OnExtentUpdated事件中: //控制鹰眼的代码 IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;//以mapControl2为图形容器 IActiveView pAv = pGraphicsContainer as IActiveView; 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ArcGIS Engine控件编程(3)在线全文阅读。
相关推荐: