PIE SDK专题制图下地图的的操作
1. 功能简介
制图模式和地图模式下用的地图是同一份地图,那么在制图模式下如果需要对地图进行操作(例如地图的拉框放大,缩小),那么该如何操作呢,地图范围视图变化在制图模式下该如何监听呢,下面主要介绍PIE SDK如何在制图模式下如何对地图进行操作。
2. 功能实现说明
2.1 制图下地图范围的监听
制图模式用的是制图控件PageLayoutControl,制图控件里面的又包含了一个Map,这个Map中的数据和地图模式控件MapControl的Map的数据是同一份,获取地图模式的地图我们可以写成MapControl.ActiveView.FocusMap或者MapControl.FocusMap;那么制图模式中的地图也是同理,即PageLayoutControl.ActivewView.FocusMap或者PageLayoutControl.FocusMap;
对制图模式下地图范围的监听,就需要对制图模式的视图变化进行监听,那么就需要PIE SDK中IActiveViewEvents事件接口,IactiveViewEvents接口下有很多关于地图的事件,如地图添加,删除,范围更新,空间参考发生变化等,下面以地图视图范围发生变化为例讲述如何使用该接口
- /// <summary>
- /// 制图模式下对地图范围变化的监听
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void tbn_MapExtentListening_Click(object sender, EventArgs e)
- {
- IActiveViewEvents activeViewEvents = pageLayoutControl1.ActiveView.FocusMap as IActiveViewEvents;
- activeViewEvents.OnViewRefreshed += FormMain_OnViewRefreshed;
- }
- /// <summary>
- /// 监听事件
- /// </summary>
- void FormMain_OnViewRefreshed()
- {
- string spatialRefence = pageLayoutControl1.FocusMap.SpatialReference.Name; MessageBox.Show(string.Format("地图范围刷新变化,当前地图的参考坐标为:{0}", spatialRefence));
- }
2.2 制图模式下对地图范围的控制
在制图模式下,一般情况需要对地图进行控制,一般都是范围控制,主要考虑两个方面,一个是对制图控件进行控制,二是对制图下的地图进行控制。
如对地图的拉框放大功能,需要鼠标与地图进行交互, 鼠标按下后移动绘制拉框的过程是显示在在制图控件上的,但是鼠标弹起时效果却是要制图控件的框不变,将框内的地图范围进行改变,鼠标按下触发MouseDown事件,移动触发MouseMove事件,当鼠标弹起触发MouseUp事件后拉框绘制完成,将拉框的范围设置为地图的显示范围,这样就完成一次拉框放大操作。
- /// 标识
- private int m_Flag = ;
- /// 开始点
- private IPoint m_StartPoint;
- /// 结束点
- private IPoint m_EndPoint;
- /// 是否锁定(判断当前鼠标移动时是否是鼠标按下未抬起状态)
- private bool m_Lock = false;
- /// 制图模式下地图ActiveView
- private IActiveView m_PageMapActiveView = null;
- 可以写在地图初始化里面:
- PageMapActiveView= pageLayoutControl1.FocusMap as IActiveView;
- /// <summary>
- /// 制图模式下对地图范围的操作(以地图放大为例)
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void tbn_MapZoomInControl_Click(object sender, EventArgs e)
- {
- m_Flag = ;//m_Flag是全局变量
- }
- /// <summary>
- /// 制图模式下鼠标按下事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pageLayoutControl1_MouseDown(object sender, MouseEventArgs e)
- {
- if (m_Flag == )
- {
- m_StartPoint = m_PageMapActiveView.DisplayTransformation.ToMapPoint(e.X, e.Y);
- m_Lock = true;
- }
- }
- /// <summary>
- /// 制图模式下鼠标弹起事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pageLayoutControl1_MouseUp(object sender, MouseEventArgs e)
- {
- if (m_StartPoint == null) return;
- m_Lock = false;
- IEnvelope envelop = new Envelope();
- m_EndPoint = m_PageMapActiveView.DisplayTransformation.ToMapPoint(e.X, e.Y);//将制图模式的屏幕坐标转换成地图坐标
- System.Drawing.Point point = m_PageMapActiveView.DisplayTransformation.FromMapPoint(m_StartPoint.X, m_StartPoint.Y);
- IPoint startPoint = m_PageMapActiveView.DisplayTransformation.ToMapPoint(point.X, point.Y);
- envelop.PutCoords(startPoint.X, startPoint.Y, m_EndPoint.X, m_EndPoint.Y);
- m_PageMapActiveView.Extent = envelop;
- pageLayoutControl1.PartialRefresh(ViewDrawPhaseType.ViewAll);
- m_StartPoint = null;
- }
- /// <summary>
- /// 制图模式下鼠标移动事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pageLayoutControl1_MouseMove(object sender, MouseEventArgs e)
- {
- if (m_StartPoint == null || e.Button != MouseButtons.Left) return;
- if (m_Lock == true)//鼠标拉框按下未抬起
- {
- //将坐标转换成制图模式地图的坐标
- System.Drawing.Point point = m_PageMapActiveView.DisplayTransformation.FromMapPoint(m_StartPoint.X, m_StartPoint.Y);
- IPoint startPoint = pageLayoutControl1.ActiveView.DisplayTransformation.ToMapPoint(point);//屏幕坐标转换成制图坐标(不是制图中的地图坐标)
- m_EndPoint = pageLayoutControl1.ActiveView.DisplayTransformation.ToMapPoint(e.X, e.Y);
- //空间范围
- IPointCollection polygon = new Polygon();
- polygon.AddPoint(startPoint.X, startPoint.Y);
- polygon.AddPoint(m_EndPoint.X, startPoint.Y);
- polygon.AddPoint(m_EndPoint.X, m_EndPoint.Y);
- polygon.AddPoint(startPoint.X, m_EndPoint.Y);
- polygon.AddPoint(startPoint.X, startPoint.Y);
- //符号样式
- ILineSymbol lineSymbol = new SimpleLineSymbol();
- lineSymbol.Color = System.Drawing.Color.Red;
- lineSymbol.Width = ;
- IFillSymbol fillSymbol = new SimpleFillSymbol();
- fillSymbol.OutlineSymbol = lineSymbol;
- fillSymbol.Color = Color.FromArgb(, Color.Yellow);//alpha参数为透明度
- //绘制图形
- pageLayoutControl1.ActiveView.StartDrawing();
- pageLayoutControl1.ActiveView.DrawGeometry(fillSymbol, polygon as IGeometry);
- pageLayoutControl1.ActiveView.FinishDrawing();
- }
- }
- /// <summary>
- /// 制图模式下地图缩小
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void tbn_MapZoomOut_Click(object sender, EventArgs e)
- {
- IEnvelope envelop = m_PageMapActiveView.Extent;
- envelop.Expand(, , true);//缩放参数小于1时,是地图放大,反之,地图缩小
- m_PageMapActiveView.Extent = envelop;
- pageLayoutControl1.PartialRefresh(ViewDrawPhaseType.ViewAll);
- }
2.3 核心接口与方法
接口/类 |
方法/属性 |
说明 |
PIE.Carto.IActiveViewEvents |
OnViewRefreshed |
视图更新 |
PIE.Carto.IActiveView |
Extent |
视图范围 |
ToMapPoint |
将屏幕坐标转换陈过地图坐标 |
|
FromMapPoint |
将地图坐标转换成屏幕坐标 |
|
StartDrawing |
开始绘制 |
|
FinishDrawing |
结束绘制 |
|
DrawGeometry |
绘制图形 |
2.4 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/09.专题制图/ 07制图模式下地图操作 |
视频位置 |
百度云盘地址下/PIE视频教程/09.专题制图/ 07制图模式下地图操作.avi |
2.5 示例截图
对地图范围的监听:
拉框绘制前:
拉框绘制后:
PIE SDK专题制图下地图的的操作的更多相关文章
- PIE SDK专题制图下屏幕坐标转地图坐标
1. 功能简介 PIESDK提供了专题制图下鼠标屏幕坐标转地图坐标功能. 2. 功能实现说明 2.1屏幕坐标转地图坐标 此功能用到了IPageLayout.ToMapPoint()方法,它的主要 ...
- PIE SDK专题制图打开模板
1. 功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用时只需要打开该模板,加载相应数据,就可以直接出图了,省去了重复制作图幅的麻烦,方 ...
- PIE SDK专题制图保存模板
1. 功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦, ...
- PIE SDK专题制图另存模板
1.功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦,方便快捷 ...
- PIE SDK专题制图切换模板
1. 功能简介 专题图是突出且较完备的表示一种或几种自然或社会经济现象,从而使地图起到专门化的作用.与普通地图不同,专题图的表示内容丰富多彩,多种多样.在实际业务应用中经常会用同一张地图出很多个 ...
- PIE SDK 文章目录索引
1.PIE SDK介绍 1.1. PIE软件介绍 1.2. PIE SDK介绍 1.3. PIE支持项目介绍 1.4. PIE.NET-SDK插件式二次开发介绍 1.5. PIE.NET-S ...
- PIE SDK导出图片
1. 功能简介 导出图片功能可以将制图模板以及视图.绘制元素.制图元素等保存为图片.本示例程序实现了专题制图下导出图片功能. 2. 功能实现说明 2.1导出图片 2.2 实现思路及原理说明 调用IPa ...
- PIE SDK屏幕坐标和地图坐标转换
1. 功能简介 屏幕坐标和地图坐标转换,就是字面意思,将电脑屏幕的坐标转换为带有空间信息的地图坐标,主要运用PIE SDK地图控件的ToMapPoint()方法,而地图坐标转换为设备坐标(屏幕),用的 ...
- PIE SDK地图范围设置
1.功能简介 地图范围设置主要就是对图层的地图浏览控制,例如地图的放大.缩小.漫游.全图显示.1:1视图.比例尺等功能,能更好的与地图有一个互动的地图浏览体验.PIE SDK对地图范围设置主要利用IC ...
随机推荐
- 8.python 系统批量运维管理器之pexpect模块
小插曲 前几节讲了paramiko模块,但是pexpect模块的功能几乎跟paramiko一样,先来分析一下: 1.各自介绍 pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应, ...
- 彻底清除Window7下的360注册表
当流氓360遇到强迫症,将注定有一场厮杀... 今天装了个虚拟机,其中win7系统是在网上随便下载了一个,是非纯净版的,自带了360在内的好多软件,其他软件都轻松删掉,但查看注册表时发现竟然有360残 ...
- HTML总结之:HTML5的DOCTYPE 与 meta 属性介绍
HTML5头部常用介绍: [DOCTYPE html] 声明文档类型为HTML5文件. [meta标签] <meta> 元素可提供有关页面的元信息(meta-information), ...
- ArcGIS坐标转换
我忘了怎么设置坐标系了- 定义投影ArcCatalog设置? -arctoolbox好像都可以 感觉不用想的那么复杂]直接定义投影就行了 选这一个吗 这个就行了' 然后? 应该是先定义成 ...
- AES加密 AESCrypt 类
/// <summary> /// AES加密 /// </summary> public sealed class AESCrypt { /// <summary> ...
- 来自网易云的黑科技,带尖角的div......
今天在网易云的网页版听歌,话说Steve Vai的曲子永远是这么让人揣摩不透,不过我还时更喜欢老Joe,咦,跑题了··· 大家可以看到评论输入框和回复框,上面都有个小尖角,实现的方式有很多,我一般是用 ...
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)
Anagrams of string(带有重复项) 使用递归.对于给定字符串中的每个字母,为字母创建字谜.使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基 ...
- angular HTML属性绑定
- 《C#多线程编程实战》1.10 lock关键字
lock关键字是锁定资源用的. 书上的代码解释很好. /// <summary> /// 抽象类 加减法 /// </summary> abstract class Count ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架(多语言方案)
个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基 ...