没有合适的资源?快使用搜索试试~ 我知道了~
首页ArcGIS Engine二次开发——提高篇
资源详情
资源评论
资源推荐
高级功能开发
ArcGIS Engine 二次开发
——提高篇
高级功能开发
1 缩略图(鹰眼)
鹰眼功能是 GIS 的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前
地图的范围。在本小节中我们将学习如何制作这种鹰眼。
1.1 添加控件
新建一个 项目,项目名称为 ,将 的名字设置为 ,并
添加 、两个 和 等四个控件。布局如下图所示。左
边的 ! 用于地图数据显示和操作,右边 !" 用于鹰眼显示。
图 1 界面布局
在 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将
的伙伴控件设为 !。
图 2 添加按钮
1.2 代码添加及解释
鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在 中使用一个线框
在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼
视图中的红线框时,主视图中的视图范围也随之改变。
下面开始实现鹰眼功能,添加 #$%、#$%&、
#$%'$& 三个引用。首先在 ! 中视图范围改变时鹰眼窗体要做
出对应的响应,即绘制线框并显示,在 !()) 事件中添加代码如下:
private void axMapControl1_OnExtentUpdated(object sender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
{
//创建鹰眼中线框
IEnvelope pEnv = (IEnvelope)e.newEnvelope;
IRectangleElement pRectangleEle = new RectangleElementClass();
IElement pEle = pRectangleEle as IElement;
pEle.Geometry = pEnv;
//设置线框的边线对象,包括颜色和线宽
IRgbColor pColor = new RgbColorClass();
pColor.Red = 255;
pColor.Green = 0;
pColor.Blue = 0;
pColor.Transparency = 255;
// 产生一个线符号对象
ILineSymbol pOutline = new SimpleLineSymbolClass();
pOutline.Width = 2;
pOutline.Color = pColor;
// 设置颜色属性
pColor.Red = 255;
pColor.Green = 0;
pColor.Blue = 0;
pColor.Transparency = 0;
// 设置线框填充符号的属性
IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
pFillSymbol.Color = pColor;
pFillSymbol.Outline = pOutline;
IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;
pFillShapeEle.Symbol = pFillSymbol;
// 得到鹰眼视图中的图形元素容器
IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;
IActiveView pAv = pGra as IActiveView;
// 在绘制前,清除 axMapControl2 中的任何图形元素
pGra.DeleteAllElements();
// 鹰眼视图中添加线框
pGra.AddElement((IElement)pFillShapeEle, 0);
// 刷新鹰眼
pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}
当鼠标点击鹰眼窗体时,主窗体 ! 随之改变。在 !" 的 #$'
事件中添加代码如下:
private void axMapControl2_OnMouseDown(object sender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
{
if (this.axMapControl2.Map.LayerCount != 0)
{
// 按下鼠标左键移动矩形框
if (e.button == 1)
{
IPoint pPoint = new PointClass();
pPoint.PutCoords(e.mapX, e.mapY);
IEnvelope pEnvelope = this.axMapControl1.Extent;
pEnvelope.CenterAt(pPoint);
this.axMapControl1.Extent = pEnvelope;
this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
null, null);
}
// 按下鼠标右键绘制矩形框
else if (e.button == 2)
{
IEnvelope pEnvelop = this.axMapControl2.TrackRectangle();
this.axMapControl1.Extent = pEnvelop;
this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
null, null);
}
}
}
当 鼠 标 在 鹰 眼 窗 体 移 动 时 , 主 窗 体 ! 随 之 改 变 。 在 !" 的
#$ 事件中添加代码如下:
private void axMapControl2_OnMouseMove(object sender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
// 如果不是左键按下就直接返回
if (e.button != 1) return;
IPoint pPoint = new PointClass();
pPoint.PutCoords(e.mapX, e.mapY);
this.axMapControl1.CenterAt(pPoint);
this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null,
null);
}
下面代码用于实现 !" 与 ! 的数据的同步更新,获取主视图中
视图范围最大的图层作为鹰眼中的视图。这个更新由两部分组成,一个是对 !
添加地图文档(!) 文件)的响应,通过 ! 的 % 事件实现,一个
是对 ! 添加单个图层的响应,通过 ! 的 #!()) 事件
实现。我们获取主视图中的视图范围最大的图层写成一个独立的函数,方便调用。
private ILayer GetOverviewLayer(IMap map)
{
//获取主视图的第一个图层
ILayer pLayer = map.get_Layer(0);
//遍历其他图层,并比较视图范围的宽度,返回宽度最大的图层
ILayer pTempLayer = null;
for (int i = 1; i < map.LayerCount;i++ )
{
pTempLayer = map.get_Layer(i);
if (pLayer.AreaOfInterest.Width < pTempLayer.AreaOfInterest.Width)
pLayer = pTempLayer;
}
return pLayer;
}
然后在 ! 的 %) 事件中调用。
private void axMapControl1_OnMapReplaced(object sender,
IMapControlEvents2_OnMapReplacedEvent e)
{
//获取鹰眼图层
this.axMapControl2.AddLayer(this.GetOverviewLayer(this.axMapControl1.Map));
// 设置 MapControl 显示范围至数据的全局范围
this.axMapControl2.Extent = this.axMapControl1.FullExtent;
// 刷新鹰眼控件地图
this.axMapControl2.Refresh();
}
剩余63页未读,继续阅读
edison_2009
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- ExcelVBA中的Range和Cells用法说明.pdf
- 基于单片机的电梯控制模型设计.doc
- 主成分分析和因子分析.pptx
- 共享笔记服务系统论文.doc
- 基于数据治理体系的数据中台实践分享.pptx
- 变压器的铭牌和额定值.pptx
- 计算机网络课程设计报告--用winsock设计Ping应用程序.doc
- 高电压技术课件:第03章 液体和固体介质的电气特性.pdf
- Oracle商务智能精华介绍.pptx
- 基于单片机的输液滴速控制系统设计文档.doc
- dw考试题 5套.pdf
- 学生档案管理系统详细设计说明书.doc
- 操作系统PPT课件.pptx
- 智慧路边停车管理系统方案.pptx
- 【企业内控系列】企业内部控制之人力资源管理控制(17页).doc
- 温度传感器分类与特点.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1