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专题制图下地图的的操作的更多相关文章

  1. PIE SDK专题制图下屏幕坐标转地图坐标

    1.    功能简介 PIESDK提供了专题制图下鼠标屏幕坐标转地图坐标功能. 2. 功能实现说明 2.1屏幕坐标转地图坐标 此功能用到了IPageLayout.ToMapPoint()方法,它的主要 ...

  2. PIE SDK专题制图打开模板

    1.    功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用时只需要打开该模板,加载相应数据,就可以直接出图了,省去了重复制作图幅的麻烦,方 ...

  3. PIE SDK专题制图保存模板

    1.    功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦, ...

  4. PIE SDK专题制图另存模板

    1.功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦,方便快捷 ...

  5. PIE SDK专题制图切换模板

    1.    功能简介 专题图是突出且较完备的表示一种或几种自然或社会经济现象,从而使地图起到专门化的作用.与普通地图不同,专题图的表示内容丰富多彩,多种多样.在实际业务应用中经常会用同一张地图出很多个 ...

  6. 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 ...

  7. PIE SDK导出图片

    1. 功能简介 导出图片功能可以将制图模板以及视图.绘制元素.制图元素等保存为图片.本示例程序实现了专题制图下导出图片功能. 2. 功能实现说明 2.1导出图片 2.2 实现思路及原理说明 调用IPa ...

  8. PIE SDK屏幕坐标和地图坐标转换

    1. 功能简介 屏幕坐标和地图坐标转换,就是字面意思,将电脑屏幕的坐标转换为带有空间信息的地图坐标,主要运用PIE SDK地图控件的ToMapPoint()方法,而地图坐标转换为设备坐标(屏幕),用的 ...

  9. PIE SDK地图范围设置

    1.功能简介 地图范围设置主要就是对图层的地图浏览控制,例如地图的放大.缩小.漫游.全图显示.1:1视图.比例尺等功能,能更好的与地图有一个互动的地图浏览体验.PIE SDK对地图范围设置主要利用IC ...

随机推荐

  1. 字符串的查找删除---C++中string.find()函数与string::npos

    给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串 输入: 输入只有一组数据 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止 输出: 删除输入的短字符串 ...

  2. css总结5:px、em、rem区别介绍

    1 PX px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. 浏览器无法调整px单位的字体,以em或rem为字体单位可调整字体. 2 EM em是相对长度单 ...

  3. 编写高质量代码改善C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化

    建议57:实现ISerializable的子类型应负责父类的序列化 我们将要实现的继承自ISerializable的类型Employee有一个父类Person,假设Person没有实现序列化,而现在子 ...

  4. java -version javac -version 版本不一致

    系统先装了jdk1.8 ,环境变量里配置的是jdk1.8,java -version 与javac -version 版本一致. 然后安装了jdk1.7 ,环境变量java_home 改成了1.7,但 ...

  5. delphi 获取windows任务栏的高度

    function GetWinTrayWnd: Integer; // 获取windows任务栏高度 var TrayWnd: HWnd; //任务栏句柄 Rec : TRect; begin Tra ...

  6. delphi监控文件夹

    (****************************************** 文件和目录监控 当磁盘上有文件或目录操作时,产生事件 使用方法: 开始监控: PathWatch(Self.Ha ...

  7. 【留用】C#的一些好的书籍

    浏览博客的时候发现一篇推荐的C#书籍,感觉真的不错,涉略过几本,水平问题,没看的很深入,正在努力,留用了!!! http://www.cnblogs.com/tongming/p/3879752.ht ...

  8. Invoke()的使用

    (最近在看协程) Invoke()方法是一种委托机制 Invoke ( "SendMsg", 3 ), 意思是3秒之后调用 SendMsg() 方法 使用时应该注意以下几点: 1. ...

  9. Setting property 'source' to 'org.eclipse.jst.jee.server:web' did not find a matching property原因

    这个问题困扰了好久,虽然只是tomcat的一个警告,但强迫症让我总觉得不舒服,搜索了好多文章才找到知乎上一篇处理的最好的.另外:能找谷哥,尽量不要度娘,太浪费时间. 具体操作如下: 默认情况下,ser ...

  10. Nginx conf基本配置

    #定义Nginx运行的用户和用户组 user www www;   #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;   #全局错误日志定义类型,[ debu ...