您的位置:首页 > 其它

如何使用ArcGIS中的动态显示(Dynamic Display)技术(六)

2010-08-04 10:35 351 查看
很久没有在自己的博客里写文章了,持续一年的高强度出差终于结束了,可以有时间思考及总结一些问题了。这段休息时间,又遇到了两次用户关于动态图层的问题,一个机载雷达模拟的快速开发,另一个是多目标跟踪显示的测试。其实开发的角度来说,动态图层的开发并不困难,核心的开发都集中在DrawDynamicLayer方法中,关键点就是如何设计出目标(目标外观样式),目标对象如何维护(如何便于查询,检索)。

这里我想说一下关于性能测试的结果。由于客户要求的目标数在5万左右,传统的方式(element,template layer,dc)肯定不行。动态图层方式可以,但是如果在DrawDynamicLayer方法内采用AO现成的symbol方式定义目标对象的绘制方式也不行,在目标对象的数目过万后就遇到瓶颈了。解决的关键还在如何提高绘制效率,由于AO对象依托com,并且是cpu密集型运算所以效率会低,这是问题的症结所在。如何解决?我可以说,没有办法解决,只有避开,ESRI这样做了,搞了个基于OpenGL的动态图层。问题的解决还是在OpenGL上,高效及GPU密集的运算方式是我们的救命稻草。我在DrawDynamicLayer直接使用OpenGL方法绘制目标,问题就解决了。我把模拟的运动目标设置为40万个,目标的实时运动居然非常流畅。事实上40万的目标个数,屏幕基本已经被占满。




40万个目标在运动中的截图(只有边缘能看清目标在运动)



事实上4万个左右屏幕上看还是能看得清楚写的,目标大小我设置为4个像素



4万个目标,背景地图稍稍隐约能见



关于OpenGL方式绘制的一些总结。

如果直接采用OpenGL方式绘制,还是有些地方需要注意的

1、关于坐标系,绘制过程会涉及到三个坐标系,屏幕坐标系,地理坐标系,以及OpenGL的坐标系,需要转换,这个通过IDisplayTransformation可以在三者间任意转换

2、如何提高OpenGL的绘制性能,这个依据显卡而定,目前大部分的显卡绘制速度都是矢量方式绘制最快,我的意思在一次绘制过程中,不要一个点一个点的设置OpenGL的绘制顶点,而是采用数据方式,一次赋给大数组后直接让OpenGL方式绘制。

3、如果前两个问题都解决了,那么就要花时间来配置目标的显示样式了,这个最好也都用OpenGL来配置,简单说来就是用OpenGL去绘制对象,摒弃AO提供的现成绘制方法,但是难度肯定是有的,毕竟又要调用很多openGL函数。





如何参考dynamicLayer,自己设计脱离AO体系的程序

自己写也比较容易,关键的技术只有两点,

一,提前对地图切片,让OpenGL按纹理的方式绘制切好的地图数据(主流的web程序都支持)

二,设计OpenGL下目标的符号样式库(文章一堆,一堆的)





这个主题写得差不多了,以后不会再写这方面的内容。

转载请注明出处!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐