ArcGIS Engine开发之地图浏览

Posted 东腾的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS Engine开发之地图浏览相关的知识,希望对你有一定的参考价值。

地图的浏览功能包括缩放、移动、量测旋转等。

1、放大与缩小

无论是放大还是缩小,都是通过改变MapControl中当前视图的范围Extent属性来实现的,主要用到包络线(Envelope)类。

包络线是一个矩形区域,它是一个几何形体的最小包络边框,每一个Geometry对象都拥有一个包络线对象。包络线通过它的最大与最小X,Y坐标来定义一个矩形形状,因此包络线对象相对于它的空间参考而言总是直角。IEnvelop接口是Expand方法的用于缩放包络线的范围,进而产生一个新的包络线对象,从而实现放大和缩放。

实现的思路:

1)固定比例尺放大是以当前视图的中心点为缩放中心对地图进行放大。在放大的操作中记下MapControl当前的Extent。

2)把该范围缩小

3)设置MapControl的extent 属性为缩小后的范围,由于MapControl本身的尺寸没有变化,这样就实现了放大的效果。

 

Expend函数的参数说明

参数 描述
dx,dy 必须,分别表示x,y轴方向上的增量
asRatio 表示是否按比例进行改变,当为false时,扩张以加法走形式进行,Xmin=Xmin-dx,Ymin=Ymin-dy,Xmax=Xmax+dx,Ymax=Ymax+dy,当为true时,扩张以乘法形式进行。无论如何中心位置不会改变

 

 

 

 

 

 

放大代码:

IEnvelope pEnvelop = mainMapControl.Extent;
            pEnvelop.Expand(0.5,0.5,true );//设置放大的倍数
            mainMapControl.Extent = pEnvelop;
            mainMapControl.ActiveView.Refresh();

缩小代码:

IActiveView pActiveView = mainMapControl.ActiveView;
            IPoint centPoint = new PointClass();
            centPoint.PutCoords((pActiveView .Extent.XMin+pActiveView .Extent .XMax )/2,(pActiveView.Extent .YMax+pActiveView .Extent.YMin )/2);
            IEnvelope pEnvelop=pActiveView .Extent ;
            pEnvelop .Expand (1.5,1.5,true);//与放大的区别在于expand的参数不同
            pActiveView .Extent .CenterAt (centPoint );
            pActiveView .Extent=pEnvelop ;
            pActiveView .Refresh ();

2、拉框放大与缩小

拉框放大及时用鼠标拖出来的矩形放大到数据视图额整个范围。

拉框放大缩小用到的TrackRectangle方法。该方法在MapControl的OnMouseDown事件中触发,会在MapControl上生成一个由用户鼠标轨迹定义的矩形橡皮筋。该方法返回一个IPolygon接口的几何对象。在方法的执行过程中,MapControl的OnMouseDown事件被触发,这时还没有发生MapControl的onMouseUp事件,所以追踪时按下ESC键可以取消TrackRectangle的操作。

1)拉框放大的思路

使用Envelope获取鼠标拖出的矩形橡皮筋范围值赋给当前的视图,若矩形的范围为空则返回。

 

以上是关于ArcGIS Engine开发之地图浏览的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS Engine开发之地图文档保存

ArcGIS Engine开发之地图基本操作

ArcGIS Engine开发之地图基本操作

ArcGIS Engine开发之地图基本操作

ArcGIS Engine开发之视图同步

《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现