ArcGIS Engine 10.0 for.NET开发学习笔记(八)
来源:互联网 发布:mac怎么查看隐藏文件夹 编辑:程序博客网 时间:2024/06/07 11:31
【地图基本操作】
一、要素选择操作要素选择可快速拾取地理要素,并进行要素的相关操作,如缩放至选择、属性信息等。这里主要讲以下三个功能:要素选择、缩放至选择、清除选择。
1、要素选择
以矩形框或者点选的方式对地图中的要素进行选择,用到IMap接口的SelectByShape方法,该方法可以查询到与输入的形状相交的图层中的所有IFeatureLayer接口类型的Features,但有一个前提是该FeatureLayer图层的Selectable属性为true。
实现思路如下:
(1)使用MapControl的TrackRectangle方法绘制矩形框,当矩形框为空时,则将鼠标当前点击点向外扩展为矩形框作为选择区域。
(2)然后使用IMap接口的SelectByShape方法进行要素的选择。
核心代码如下:
IEnvelope pEnv = mainMapControl.TrackRectangle(); IGeometry pGeo = pEnv as IGeometry; //矩形框若为空,即为点选时,对点范围进行扩展 if (pEnv.IsEmpty == true) { tagRECT r; r.left = e.x - 5; r.top = e.y - 5; r.right = e.x + 5; r.bottom = e.y + 5; pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4); pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference; } pGeo = pEnv as IGeometry; mainMapControl.Map.SelectByShape(pGeo, null, false); mainMapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
也可以调用ArcEngine的类库资源ControlsSelectFeaturesTool实现该功能,核心代码如下:
mainMapControl.CurrentTool = null; ControlsSelectFeaturesTool pTool = new ControlsSelectFeaturesToolClass(); pTool.OnCreate(mainMapControl.Object); mainMapControl.CurrentTool = pTool as ITool;
2、缩放至选择
实现思路如下:
(1)遍历地图中选中的要素。
(2)使用IEnvelop接口的Union方法获取所有选中要素的外包框范围,使地图视图缩放至该范围。
核心代码如下:
int nSlection = mainMapControl.Map.SelectionCount; if (nSlection == 0) { MessageBox.Show("请先选择要素!", "提示"); } else { ISelection selection = mainMapControl.Map.FeatureSelection; IEnumFeature enumFeature = (IEnumFeature) selection; enumFeature.Reset(); IEnvelope pEnvelope = new EnvelopeClass(); IFeature pFeature = enumFeature.Next(); while (pFeature != null) { pEnvelope.Union(pFeature.Extent); pFeature = enumFeature.Next(); } pEnvelope.Expand(1.1, 1.1, true); mainMapControl.ActiveView.Extent = pEnvelope; mainMapControl.ActiveView.Refresh(); }
也可以调用ArcEngine的类库资源ControlsZoomToSelectesCommand实现该功能,核心代码如下:
ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsZoomToSelectedCommandClass(); pCommand.OnCreate(mainMapControl.Object); pCommand.OnClick();
3、清除选择
清除当前选中的要素,核心代码如下:
IActiveView pActiveView = mainMapControl.ActiveView; pActiveView.FocusMap.ClearSelection(); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, pActiveView.Extent);
也可以调用ArcEngine的类库资源ControlsClearSelectionCommand实现该功能,核心代码如下:
ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsClearSelectionCommandClass(); pCommand.OnCreate(mainMapControl.Object); pCommand.OnClick();
二、数据视图与布局视图的同步
数据视图与布局视图的同步,首先要保证数据的一致性,其次是数据显示范围的一致性。该同步主要涉及IMapControl接口的OnMapReplaced事件和OnAfterScreenDraw事件。
1、OnMapReplaced事件
OnMapReplaced事件发生在MapControl的地图被替换后,即在IMapControl接口的Map被另一个地图替换时(如IMapControl接口的LoadMxFile方法被调用时或Map属性被明确替换时)触发该事件。
2、OnAfterScreenDraw事件
OnAfterScreenDraw事件发生在MapControl内的地图完成绘制之后,即在IDisplayEvents接口的DisplayFinished事件之后被触发,而IDisplayEvents接口的DisplayFinished事件则在地图显示于屏幕时被触发。
实现思路如下:
(1)当数据视图的范围发生变化时,获得此时数据视图的范围。
(2)传到布局视图控件的视图中,同时使用数据复制的方法保证数据的一致性。
核心代码如下:
private void CopyToPageLayout() { IObjectCopy pObjectCopy = new ObjectCopyClass(); object copyFromMap = mainMapControl.Map; object copiedMap = pObjectCopy.Copy(copyFromMap);//复制地图到copiedMap中 object copyToMap = axPageLayoutControl.ActiveView.FocusMap; pObjectCopy.Overwrite(copiedMap, ref copyToMap); //复制地图 axPageLayoutControl.ActiveView.Refresh(); }
当数据视图控件加载的地理数据重绘时,与其联动的布局视图控件的地图范围也需发生相应的变化。在axMapControl控件中的OnAfterScreenDraw事件中获取当前数据视图范围,并传到axPageLayoutControl控件的ActiveView对象的FocusMap中,同时调用数据复制的方法。核心代码如下:
IActiveView pActiveView = (IActiveView)axPageLayoutControl.ActiveView.FocusMap; IDisplayTransformation displayTransformation = pActiveView.ScreenDisplay.DisplayTransformation; displayTransformation.VisibleBounds = mainMapControl.Extent; axPageLayoutControl.ActiveView.Refresh(); CopyToPageLayout();
0 0
- ArcGIS Engine 10.0 for.NET开发学习笔记(八)
- ArcGIS Engine 10.0 for.NET开发学习笔记(一)
- ArcGIS Engine 10.0 for.NET开发学习笔记(二)
- ArcGIS Engine 10.0 for.NET开发学习笔记(三)
- ArcGIS Engine 10.0 for.NET开发学习笔记(四)
- ArcGIS Engine 10.0 for.NET开发学习笔记(五)
- ArcGIS Engine 10.0 for.NET开发学习笔记(六)
- ArcGIS Engine 10.0 for.NET开发学习笔记(七)
- ArcGIS Engine 10.0 for.NET开发学习笔记(九)
- arcgis engine开发学习
- Arcgis Engine Runtime开发笔记
- ArcGIS Runtime for .Net Quartz开发探秘(八):三维
- Arcgis Engine for java 10 开发环境配置 (eclipse)
- ArcGIS Engine学习(1)
- ArcGIS API for iOS开发教程(八)地图定位
- Arcgis for iOS开发笔记(一)
- 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word
- 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能
- mysql的安装和用户权限
- android studio 怎么引入签名文件
- 矩阵基础1003 HDU 4965
- Java学习之Iterator(迭代器)的一般用法 (多方整理)
- pdo事物回滚
- ArcGIS Engine 10.0 for.NET开发学习笔记(八)
- 【Maven用户手册】Maven生命周期
- 小话java多线程机制
- 矩阵基础1004 HDU 5015
- poj 3304 segments 计算几何
- web.xml加载顺序
- Fresco简单使用
- 矩阵基础1005 HDU 4686
- 【Maven用户手册】Maven命令