ArcEngine开发 您所在的位置:网站首页 博客系统开发方法 ArcEngine开发

ArcEngine开发

2023-04-06 09:36| 来源: 网络整理| 查看: 265

对于GIS来说,地图的浏览功能(包括大小缩放、漫游、历史视图控制等)是一项最基础的功能,在所有的GIS系统中都要求实现。利用ArcEngine开发的GIS中实现这些功能不止一种方法。当然最简单的方法是利用ArcEngine的内置Command控件来与地图显示控件进行交互,另外也可以通过ArcEngine类库的相应接口和方法来实现。本文结合一个入门级实例讲述不同方法来实现地图浏览功能。

先上效果图,如下:

2010-11-28_131310

用ArcEngine内置的Command控件来实现上图所示功能简直易如反掌,实例化对应的Command对象并显式的运行它,即可。比如中心放大和前一视图功能的实现代码如下:

//中心放大 ESRI.ArcGIS.SystemUI.ICommand pCmd = new ControlsMapZoomInFixedCommandClass(); pCmd.OnCreate(pMapControl.Object); pCmd.OnClick(); //前一视图 ESRI.ArcGIS.SystemUI.ICommand pCmd = new ControlsMapZoomToLastExtentBackCommandClass(); pCmd.OnCreate(pMapControl.Object); pCmd.OnClick();

其它几个浏览功能如中心缩小、拉框缩小、漫游、后一视图、全幅显示等都可以按同样的方式来实现,就不一一列举了。下面讲解一下实现地图浏览功能的其它方式。

中心放大功能。放大功能实际上是缩小了显式窗口中的显示范围。可利用IEnvelope接口的Expand方法,功能实现代码如下:

//中心放大 pIClone = (IClone)axMapControl1.Extent; pIEnvelope = (IEnvelope)pIClone.Clone(); pIEnvelope.Expand(0.5, 0.5, true); axMapControl1.Extent = pIEnvelope;

除此之外,还可以利用IEnvelope接口的PutCoords方法,功能实现代码如下:

dWidth = axMapControl1.Extent.Width; dHeight = axMapControl1.Extent.Height; pIEnvelope = new EnvelopeClass(); pIEnvelope.PutCoords(axMapControl1.Extent.XMin + dWidth / 4, axMapControl1.Extent.YMin + dHeight / 4, axMapControl1.Extent.XMax - dWidth / 4, axMapControl1.Extent.YMax - dHeight / 4); axMapControl1.Extent = pIEnvelope;

拉框放大功能。该功能的实现很简单,单单这一句axMapControl1.Extent = axMapControl1.TrackRectangle()就可以了。

拉框缩小功能。该功能的实现稍微麻烦一些。也是利用IEnvelope接口的PutCoords方法,重新确定地图显示范围。代码如下:

pRectangle = axMapControl1.TrackRectangle(); dWidth=axMapControl1.Extent.Width*(axMapControl1.Extent.Width/pRectangle.Width); dHeight = axMapControl1.Extent.Height * (axMapControl1.Extent.Height / pRectangle.Height); pIEnvelope = new EnvelopeClass(); @pIEnvelope.PutCoords(axMapControl1.Extent.XMin-(pRectangle.XMin - axMapControl1.Extent.XMin) * (axMapControl1.Extent.Width / pRectangle.Width), axMapControl1.Extent.YMin-(pRectangle.YMin - axMapControl1.Extent.YMin) * (axMapControl1.Extent.Height / pRectangle.Height), axMapControl1.Extent.XMin - (pRectangle.XMin - axMapControl1.Extent.XMin) * (axMapControl1.Extent.Width / pRectangle.Width) + dWidth, axMapControl1.Extent.YMin - (pRectangle.YMin - axMapControl1.Extent.YMin) * (axMapControl1.Extent.Height / pRectangle.Height) + dHeight); axMapControl1.Extent = pIEnvelope;

历史视图功能。可利用IExtentStack接口的Undo和Redo方法来实现。只需要在地图视图发生变化时,将视图范围存储于一个相应的堆栈里面,然后利用Undo和Redo方法切换到对应的历史视图。

在地图窗口的OnExtentUpdated事件里添加该代码:pExtentStack = axMapControl1.ActiveView.ExtentStack;前一视图的实现代码如下:

if (pExtentStack.CanUndo()) { pExtentStack.Undo(); axMapControl1.ActiveView.Refresh(); }

其它功能代码都是与上述代码类似。不再详细给出实现代码了。

窗体界面效果是借助了第三方组件DotNetBar,关于DotNetBar的入门级用法可参考http://www.cnblogs.com/hans_gis/archive/2010/07/13/1776817.html和http://www.cnblogs.com/hans_gis/archive/2010/08/07/1794863.html。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有