基于ArcEngine与C#的鹰眼地图实现
鹰眼图是对全局地图的一种概略表达,具有与全局地图的空间参考和空间范围。为了更好起到空间提示和导航作用,有些还具备全局地图中重要地理要素,如主要河流、道路等的概略表达。通过两个axMapControl控件,主控件axMapControl 1和鹰眼控件axMapControl 2。要实现鹰眼功能,关键技术有两点,一是如何让两个控件使用的数据保持一致,另一点是如何绘制鹰眼控件中的显示方框。
一、数据共享,使用axMapControl1的控件的OnMapReplaced事件。OnMapReplace事件发生MapControl的地图被替换后,即IMapControl2::Map被另一个地图替换时(如IMapControl2::LoadMxFile方法被调用时或map属性被明确替换时)触发该事件。用这个事件来保持与当前图层同步。
1 private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e) 2 { 3 if (axMapControl1.Map.LayerCount > 0) 4 { 5 for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++) 6 { 7 axMapControl2.AddLayer(axMapControl1.get_Layer(i)); 8 } 9 axMapControl2.Extent=axMapControl1.Extent; 10 axMapControl2.Refresh(); 11 } 12 }
二、显示方框的绘制。在鹰眼控件axMapControl2中使用鼠标拖曳视图时,鹰眼控件axMapControl2中出现红色矩形框。
1)axMapControl1控件的OnExtentUpdated事件。OnExtentUpdated事件在MapControl的可视化范围发生变化后发生,即当IMapControl2::Extent属性发生变化时被触发。改变MapControl中可视化范围的途径包括精确设置范围、缩放、漫游或使用IMapControl2::CenterAt方法等。
1 private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) 2 { 3 //获得一个新范围 4 IEnvelope pEnvelope = (IEnvelope)e.newEnvelope; 5 IGraphicsContainer pGrahicsContainer = axMapControl2.Map as IGraphicsContainer; 6 IActiveView pActiveView = pGrahicsContainer as IActiveView; 7 //在绘制前清除axMapControl2中所有图层 8 pGrahicsContainer.DeleteAllElements(); 9 IRectangleElement pRectangleElement = new RectangleElementClass(); 10 IElement pElement = pRectangleElement as IElement; 11 pElement.Geometry = pEnvelope; 12 //设置鹰眼图中的红线框 13 IRgbColor pColor = new RgbColorClass(); 14 pColor.Red = 255; 15 pColor.Green = 0; 16 pColor.Blue = 0; 17 pColor.Transparency = 255; 18 //产生一个线符号对象 19 ILineSymbol pOutline = new SimpleLineSymbolClass(); 20 pOutline.Width = 3; 21 pOutline.Color = pColor; 22 //设置填充符号颜色 23 pColor = new RgbColorClass(); 24 pColor.Red = 255; 25 pColor.Green = 0; 26 pColor.Blue = 0; 27 pColor.Transparency = 0; 28 //设置填充符号 29 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); 30 pFillSymbol.Color = pColor; 31 pFillSymbol.Outline = pOutline; 32 33 IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; 34 pFillShapeEle.Symbol = pFillSymbol; 35 pGrahicsContainer.AddElement((IElement)pFillShapeEle, 0); 36 pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 37 38 }
2)axMapControl2控件的OnMouseDown事件。当在MapControl上点击鼠标任何键时触发OnMouseDown事件。
1 private void axMapControl2_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) 2 { 3 if (axMapControl2.Map.LayerCount > 0) 4 { 5 if (e.button == 1) 6 { 7 IPoint pPoint = new PointClass(); 8 pPoint.PutCoords(e.mapX, e.mapY); 9 axMapControl1.CenterAt(pPoint); 10 axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 11 } 12 else if (e.button == 2) 13 { 14 IEnvelope pEnv = axMapControl2.TrackRectangle(); 15 axMapControl1.Extent = pEnv; 16 axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 17 } 18 } 19 }
3)axMapControl2控件的OnMouseMove事件。当在MapControl上移动鼠标时不断地触发OnMouseMove事件。
1 private void axMapControl2_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) 2 { 3 if (e.button == 1) 4 { 5 IPoint pPoint = new PointClass(); 6 pPoint.PutCoords(e.mapX, e.mapY); 7 axMapControl1.CenterAt(pPoint); 8 axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 9 } 10 }
三、结论
当axMapControl1中的数据被替换时,axMapControl2中的数据会自动加载axMapControl1的所有图层,实现两者的数据统一。在axMapControl2控件中拖曳或移动地图时,axMapControl1中的地图也在随时变化。
参考文献:基于ArcGIS Engine与C#.net的地图鹰眼功能的实现 南峰
《ArcGIS Engine 10 开发手册》
《ArcObjects二次开发教程》傅仲良 主编
《ArcObjects Developer Help》
转载于:https://www.cnblogs.com/vegetable/p/4101844.html
基于ArcEngine与C#的鹰眼地图实现相关推荐
- cesium小场景鹰眼地图
一.基本需求 由于项目需要,用基于CEIUSM引擎和3DMAX建模搭建一个小区级别的三维场景,在导航时,需要实现鹰眼小地图.一看到鹰眼小地图,我们会很自然地想到用百度地图或者别的什么地图加一个小图标, ...
- ae渲染存在偏移_基于三维GIS技术的矢量地图动态LOD渲染方法
本文从地图操作和要素可见性入手分析地图简化的影响因素,并基于分析的结果设计相应的缓存结构以加速地图的渲染.研究GPU环境下梯形格网的高效LOD方法,探讨简化前后节点的重组和显存中EBO数据的更新方法, ...
- cesium实现鹰眼地图(三维)效果
文章目录 1.实现效果 2.实现方法 2.1实现思路 2.2具体实现 2.2.1核心代码 2.2.2样式设置 2.2.3具体调用 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 ...
- 【Baidu Apollo】基于人工驾驶路径的实时地图生成
Apollo相对地图 基于人工驾驶路径的实时地图生成 百度资深软件工程师 Yifei Jiang 本文转自百度开发者社区 相对地图是在Apollo 2.5的时候第一次对外开放.在3.0的时候我们和 ...
- 基于单目视觉的同时定位与地图构建方法综述
摘要: 增强现实是一种在现实场景中无缝地融入虚拟物体或信息的技术, 能够比传统的文字.图像和视频等方式 更高效.直观地呈现信息,有着非常广泛的应用. 同时定位与地图构建作为增强现实的关键基础技术, 可 ...
- 借鸡下蛋:室内定位之基于众包采集的 WiFi 指纹地图
郑州疫情严重,已经封控快三周没法出门,社区工作人员说大家在家要少食多读书,为了不给国家添乱,遵守社区工作人员的指导,博主就多学习了,这不最近看了一篇论文<基于众包采集的室内 WiFi 指纹地图的 ...
- 基于三维GIS技术的矢量地图动态LOD渲染方法研究现状
"地图是人类文化的杰作,它融科学.艺术于一体,作为描述.研究人类生存环境的一种信息载体是人类生产与生活中不可缺少的一种工具."这是陈述彭院士为<中国地图学年鉴>作序的开 ...
- 基于android地图国内外研究,开题报告-基于Android平台的手机Web地图服务设计.doc...
开 题 报 告 毕业设计题目: 基于Android平台的 手机Web地图服务设计 浙江理工大学本科毕业设计(论文)开题报告 班 级 10计算机科学与技术1班 姓 名 课题名称 基于Android平台的 ...
- 基于Echarts插件的省市区多级地图下钻和返回功能实现
Echarts3的离线地图组件,比echart2更容易实现省市区多级离线地图的展示. 当然echart2也是可以实现,由于echarts是基于canvas,加载一个地图无非就是加载一张图.而这张图,则 ...
最新文章
- 二叉树的几种递归和非递归式遍历:
- HTML设计显示表格
- Input框设置只能输入中文
- WKQ学习(后台知识)
- java颜色gui_Java gui颜色不加载
- 安装、卸载、查看软件时常用的命令
- bzoj1217: [HNOI2003]消防局的设立 [树形dp]
- 口译分类词汇:上海景点名集锦
- SRP Batch合批失败
- Python3.4中文手册chm,3.7中文手册HTML
- php 图片抠图,php抠图教程(混合模式+剪切蒙版)
- coreldraw x8里线段显示尺寸_cdr工具使用技巧与方法,教你CorelDRAW X8图框精确剪裁使用方法...
- 启动docker-compose时报/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarnin
- un4 unreal4 创建路径 曲线 管道 Spline组件 使用方法
- 查2个服务器之间网络延迟,科普一下!如何查看网络延迟与服务器LAG以及解决方法!...
- SpringMVC之405错误码
- Fiddler显示IP的设置方法
- C语言I博客作业04
- Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】
- 数据分析统计学原理第十三章:实验设计与方差分析 | 我的统计学原理复习日记