第一范文网 - 专业文章范例文档资料分享平台

ArcEngine利用动态图层实现数据的实时显示

来源:用户分享 时间:2020-06-24 本文由遗失了故人 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

利用动态图层实现数据的实时显示

本帖最后由 sishui198 于 2011-8-25 09:04 编辑

前言

不刷新地图而能让数据实时显示,这在ArcGIS中已经不在是一个困扰我们的难题,在ArcGIS Engine的开发过程中,每一次更新数据后都需要刷新才能,更改大量数据并不断的刷新,让用户在静静的等待,这不是很痛苦吗?为此ArcGIS提供了一个动态图层,专门用于解决这

样问题。

ArcGIS 显示子系统管理着要素的显示和刷新,异步刷新显示和大量数据的渲染使得CPU的利用率增大,这可能导致显示延迟等问题.我们看一下ArcGIS 显示子系统的结构图,从这张

图我们更能清楚的看到ArcGIS的显示原理:

动态显示技术将渲染大量的数据从CPU端移动到了显卡上,利用了显卡的性能,这明显提高了显示性能.动态显示技术提供同步显示机制使得大量的动态数据以及高频率刷新的操作

可以在瞬间完成,下面的图详细的揭示了动态显示技术的逻辑:

动态图层介绍

动态图层是一个自定义图层,因此至少应该继承ILayer,IDynamiclayer和IGeoDataset这三个接口,好在Esri提供了一个BaseDynamicLayer这个抽象类,该接口已经继承了我们

所说的相关接口,因此我们只需要在实现动态图层的时候继承该类就行.

和动态显示相关的接口

在了解了动态显示原理之后,我们看下ArcGIS Engine为动态显示,提供了那些接口,以下是

主要的相关接口

l IDynamicMap—该接口提供Enable属性用来控制动态显示是否可用,这个接口和我们地图是一一对应的.但我们要使用动态图层的时候,必须用该接口开启动态显示功能,也就是

Enable属性设置为true。

l IDynamicLayer—该接口和Ialyer以及IGeoDataset接口写作完成动态显示,也就是符号

的绘制等,此接口提供了自定义图层动态显示内容的机制 l IDynamicScreenDisplay—该接口控制是否启用动态显示

l IDynamicGlyph—这个接口用来处理资源,这些资源可以是线,点,文本,这些资源作为符号

将被动显示。

l IDynamicGlyphFactory—该接口用来管理动态符号,用此接口可以创建,删除动态符号,这

些符号就是我们上面所提到的IDynamicGlyph的内容

l IDynamicSymbolProperties—该接口用来管理显示符号的大小,比例尺,颜色等. l IDynamicDisplay— IDynamicDisplay提供了在地图上描绘几何图形的绘图机制,并且提

供了访问动态符号工厂对象.在地图上绘制不同的几何图形,该接口和

IDynamicSymbolProperties接口协同,使用IDynamicSymbolProperties来设置的动态符号,

然后使用IDynamicDisplay绘制形状。IDynamicDisplay接口其实是下面几何绘图回调函数的参数IDynamicLayer.DrawDynamicLayer; IDynamicMapEvents.BeforeDynamicDraw;

IDynamicMapEvents.AfterDynamicDraw.

动态绘制模式

动态图层有两种绘制模式,如下:

· 重写 IDynamicLayer.DrawDynamicLayer方法

· 通过动态地图的事件:

IDynamicMapEvents.BeforeDynamicDraw IDynamicMapEvents.AfterDynamicDraw

绘图选择 · 使用动态显示API · 使用OPengl API

绘制动态图层

动态图层,有两种不同的绘图方式,因此有两个绘图阶段 :立即阶段和编译阶段。在每一个阶段,每产生一组新的绘制命令,DrawDynamicLayer方法需要遍历图层的底层数据结构,并为每个项目生成相应的绘图命令,在编译阶段的绘图命令被编译成内部专用的一个清单

列表。

每一个绘图周期内,动态地图检查每个动态层的状态。如果一个动态层需要重新绘制(动态

图层需要重新生成新的绘图命令),动态地图根据相应的绘图阶段调用动态层的DrawDynamicLayer方法,为动态层将产生一套新的绘图命令。如果有多于一个需要重新生成

绘图命令的动态图层,则整个动态显示需要重新绘制。

动态图层是主动显示方式,也就是说他有一个固定的绘图周期,在每一个绘图周期内,都会检查动态图层的ditry 属性,如果有一个动态图层是dity的,那么都会在所有的动态图

层上绘制。动态图层主要有以下两个阶段

· Immediate—不存储绘图命令. 如果它报告其当前的阶段是脏,在这种情况下,绘制命令,

将立即执行

· Compiled—在一个清单中存储绘图命令. 动态显示将使用这个清单列表绘图,当dity 改变了这个清单列表就重新创建。在编译阶段,如果它报告编译阶段是脏的并且它重新编译的速度间隔已经过去了,当这连个条件同时满足的时候,将重新编译显示列表和动态层的

绘图命令。

动态图层绘制需要实现下面的方法和熟悉:

DrawDynamicLayer

在一个给定的阶段向具体的设备绘制图层.

DynamicLayerDirty

指示动态图层从上一个指定的绘制阶段是否发生改变

DynamicRecompileRate

重新编译速率是在编译阶段调用绘图方法的时间间隔。

当重新绘制的时候,动态显示遍历动态图层并按照下面的步骤

· 通过检查立即阶段的DynamicLayerDirty以重新编译是否需要,如果任何一个动态图层在理解阶段设置了ditry标志,所有的动态图层都会在立即阶段调用DrawDynamicLayer方

· 在立即阶段直接调用DrawDynamicLayer方法

· 通过检查编译阶段的DynamicLayerDirty和DynamicRecompileRate属性确定编译是不

是需要

· 如果需要的话,在编译阶段通过调用DrawDynamicLayer方法重新编译这个图层

· 在编译阶段通过显示裂变绘图

使用动态图层

动态图层是一个自定义的图层,当我们定义了这个动态图层之后,他就和一个普通的图层一样,需要添加到一个地图中,然后我们就可以在上面绘制符号和图形等,要使用一个动

态图层,按下面的步骤就可以完成:

1开启动态显示功能;

2 创建自定义的动态图层并重写相关的绘图方法(上面提到的第一种方式);

3在Map中添加自定义的动态图层;

4 实时数据的传递. 开启动态地图功能 void InitMap()

{

IAGSServerObjectName pServerObjectName =

GetMapServer(\http://services.arcgisonline.com/ArcGIS/services\

\IName pName = (IName)pServerObjectName;

IAGSServerObject pServerObject = (IAGSServerObject)pName.Open();

IMapServer pMapServer = (IMapServer)pServerObject;

ESRI.ArcGIS.Carto.IMapServerLayer pMapServerLayer = new

ESRI.ArcGIS.Carto.MapServerLayerClass();

pMapServerLayer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName);

axMapControl1.AddLayer(pMapServerLayer as ILayer);

axMapControl1.Refresh();

pActvie = axMapControl1.Map as IActiveView;

IDynamicMap pDynamicMap = pActvie.FocusMap as IDynamicMap;

pDynamicMap.DynamicMapEnabled = true;

pDynamicMap.DynamicDrawRate = 15;

}

定义自定义的动态图层并重写DrawDynamicLayer方法

using System;

using System.Collections.Generic;

using System.Text; using System.Drawing; using System.Timers;

using ESRI.ArcGIS.ADF;

using ESRI.ArcGIS.ADF.Connection.Local; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry;

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高中教育ArcEngine利用动态图层实现数据的实时显示 全文阅读和word下载服务。

ArcEngine利用动态图层实现数据的实时显示 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1101823.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top