ArcGIS三维优化方法.docx
- 文档编号:24563700
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:595.79KB
ArcGIS三维优化方法.docx
《ArcGIS三维优化方法.docx》由会员分享,可在线阅读,更多相关《ArcGIS三维优化方法.docx(12页珍藏版)》请在冰豆网上搜索。
ArcGIS三维优化方法
ARCGIS三维优化方法
――――文:
于强,编辑:
康来成、白旭阳
一、问题解决:
1、三维文字漫游死机问题
现象:
在非导航状态下模式(可以侧视三维要素的显示模式)下,对三维注记对象漫游,速度极慢甚至死机。
分析:
非导航模式下漫游中的死机问题,主要是全国乡镇地名注记数据(81400个要素),很可能是在浏览过程中,由于一次显示的要素过多造成的长时间无响应。
现场显示效果如图1
图1
从图中可以看到,很可能是视角远处的很多注记一次全部显示而造成系统无响应。
针对这个问题首先能够想到的是要使视角远处的注记点不显示,即要依据当前视点的合理可视范围对地面注记进行过滤。
调优:
一个重要的“Ckeckvisbilitybasedoneachtiledistance”这一选项,这一选项默认是被选中的,。
而选中的这个选项能够自动的实现对每个图层块(瓦片),依据设定的显示距离进行过滤。
但默认的参数有时并不是最优的,手工设置后发现,这种过滤方法不但能解决非导航模式的死机问题,而且极大的提高了数据漫游的显示效率,效果如图3
图3
2、大量矢量要素漫游显示假死问题
现象:
对于GB级的矢量要素(密密码码的等高线、水系),漫游过程中,刷新一次大约50秒远远超过用户要求的20秒/次,甚至出现长时间无响应。
分析:
根据文字的调优经验,针对数据量非常大的特点,显示时只需要加载窗口所需数据即可,如果能够快速定位所需数据,肯定能够提高显示效率。
调优
方法一,利用空间索引。
尝试将存储于pgdb中的数据导入ArcSDE(本机),并建立合适的空间索引,经测试发现显示漫游速度从原来的50多秒,提高到了18秒左右,明显减少了ArcGlobe的漫游响应时间。
导入ArcSDE建立空间索引的方法基本上达到了用户的最低要求。
虽然导入ArcSDE建立空间索引的方法基本上能够满足用户的最低需求,但效果仍然不够理想。
要整体提高数据浏览速度必须借助缓存机制来实现。
方法二:
利用缓存。
研究ArcGlobe的缓存机制发现,打开图层后ArcGlobe会依据图层的比例来建立“按需缓存”。
“按需缓存”是在浏览的时候自动生成的缓存文件,这会影响浏览速度,因此需要在浏览前按照合适的比例及显示参数,一次性创建好缓存。
经测试,建立缓存文件后,在显示初始化完成后,导航模式下(只能府视三维要素的显示模式)漫游速度大约5秒、非导航模式(可以侧视三维要素的显示模式)漫游速度10秒左右。
小结:
建立注记缓存后能很大程度上提高漫游速度,但还是不够理想。
经过5组数据比较发现,Don’tShowlayerwhenzoomed,Checkvisbilitybasedoneachtiledistance,FeatureProperties,三个参数综合作用能够优化显示速度,其中发挥关键作用的是比例尺大小(加载数据时设置的参数),因为比例尺决定了图层缓存分块的大小。
漫游和过滤时如果缓存分块太大会减少缓存调度的效率、影响漫游过滤的范围。
通过对三个参数进行合理的设置,创建缓存,最终显示结果:
数据初始化15秒左右,初始化过程中漫游5秒左右(初次达到注记图层显示距离时,会加载注记数据,此过程为初始化过程),数据加载完成后最终漫游速度都为1秒内(几乎相当与实时)。
(实际时间因具体地名注记疏密不同而不同。
)
优化次数
优化的方案
漫游速度
1
ArcSDE创建索引
18秒
2
对文件创建缓存
导航模式10秒;非导航模式5秒
3
设置显示距离;对每个图层块依据设定距离进行过滤;设置合理的比例尺
均为1秒内
3、是否对所有数据创建缓存、选择何种加载方式
在ArcGlobe中,数据的加载方式有三种:
影像、矢量(栅格化)、3DVector。
经测试,不事先建缓存,只使用临时缓存时,显示效率:
影像>矢量>3DVector。
尽管影像和矢量的临时缓存的浏览效率大于3DVector的速度,但是当图层较多(尤其是矢量)的时候对整体性能影响也比较大,因此如果条件允许,最好对所有类型数据都建立缓存文件。
性能最优的数据加载方式:
原始类型
加载方式
理由
影像数据
栅格
或Elevation
没有高程的“图片”只有一种选项,有高程的必须以Elevation方式加载才会有起伏效果。
矢量(面)
栅格
只有一种选项
矢量(点、线)
栅格
有两种选项,但数据量大时3DVector非常影响性能。
注记(Annatation)
3DVector
注记一般需要立起来显示,以体现3维的效果,所以需要选择选择3DVector。
多片(MultiPatch)
3DVector
只有一种选项
4、缓存文件的格式,如何选择
ArcGlobe支持的缓存格式有两种:
JPG和DXT,其中DXT是由显卡支持的纹理压缩格式,有助于减少纹理对内存的消耗。
JPG和DXT缓存格式特点如下表所示:
JPG特点
DXT特点
CPU占用
在显示前需要解压缩
DXT不需要解压就可以显示,因此显示性能高一些
内存占用
内存占用2比特/纹元,与dxt相比多占用一半显存
内存占用1比特/纹元,与jpg相比少占用一半显存
硬盘占用
通常情况下硬盘缓存比DXT格式小8到12倍
通常情况下硬盘缓存比JPG格式大8到12倍
显卡要求
对显卡要求较低,。
但同等档次,价位,A系列显卡比G系列显卡要快。
对显卡要求较高。
但同等档次,价位,A系列显卡比G系列显卡要快。
经测试,DXT格式的缓存需要显卡支持,一些老的显卡不支持DXT格式,这样就不能发挥DXT格式的性能优势。
如何选择?
在显卡支持DXT格式情况下:
(1)局部范围浏览数据时DXT缓存比JPG缓存提升40%(帧/秒)的性能,全球范围差别不大;
(2)DXT缓存比JPG缓存少占用10%到30%内存;
(3)DXT缓存通常比大8到12倍(针对栅格缓存而言)。
选择建议:
栅格、矢量:
选JPG格式,因为缓存后数据量太大不方便部署。
注记、高程:
默认既可,没有提供选项。
MultiPath:
选DXT格式,提高显示性能,减少初始化时间,还可以选择纹理的压缩质量来调整缓存大小(有可能比JPG格式的还小),选择适当即可,压缩会损失纹理贴图的显示质量。
Engine实现例子代码:
'VBASample:
'Change texturecompressiontypein layerproperties:
' -compressiontype(JPEGorDXT)
SubSetGlobeLayerProperties()
OnErrorGoToeh
DimpDocAsIGMxDocument:
SetpDoc=ThisDocument
DimpSceneAsIScene:
SetpScene=pDoc.Scene
DimpLayerAsILayer:
SetpLayer=pScene.Layer(0)
DimpLyrExtAsILayerExtensions:
SetpLyrExt=pLayer 'QI
DimiAsInteger
Fori=0TopLyrExt.ExtensionCount-1
IfTypeOfpLyrExt.Extension(i)IsIGlobeLayerProperties2Then
DimpProp2AsIGlobeLayerProperties2:
SetpProp2=pLyrExt.Extension(i)
ExitFor
EndIf
Nexti
Debug.PrintpProp2.TextureCompressionType,pProp2.TextureDownsamplingFactor
'esriTextureFormatType:
' 1--None
' 2--RGBA
' 3--JPEG
' 4--DXT
'pProp2.TextureCompressionType=esriTextureJPEG 'defaultvalue
pProp2.TextureCompressionType=esriTextureDXT
pProp2.ApplyDisplayPropertiespLayer
DimpGlobeAsIGlobe:
SetpGlobe=pScene 'QI
DimpGlobeDisplayAsIGlobeDisplay:
SetpGlobeDisplay=pGlobe.GlobeDisplay
DimpGDLayersAsIGlobeDisplayLayers:
SetpGDLayers=pGlobeDisplay 'QI
pGDLayers.RefreshLayerpLayer
ExitSub
eh:
MsgBoxErr.Number&":
"&Err.Description,vbExclamation,"SetGlobeLayerProperties()"
EndSub
5、缓存创建与分布式部署问题
现象:
创建的缓存容易丢失且容易遭到破坏。
费时创建的缓存都不敢轻动,怕破坏了易损的缓存。
那么如何保护创建的缓存不丢失?
如何进行有效的部署分发?
怎么部署?
分析:
ArcGlobe默认的缓存文件夹(.\LocalSettings\Temp\GlobeCache)为系统临时文件夹。
缓存文件一般都会放到这里。
但是,当改变图层GlobeDisplay、Display选项卡中的设置,比如栅格的采样方式、矢量的符号化、栅格化要素大小、改变缓存格式等设置时,原先建立的缓存将无效(无论是动态创建的,还是使用工具事先生成的)。
经测试,发现两个规律:
1、只要新添加的图层数据,系统就会对应的创建一个有唯一标识的缓存文件夹。
即始在一个工程中,重复打开同一层数据,也会产生新的缓存文件夹,而原先生成的缓存数据没法重复应用;
2、如果保存了地图文档,但做了栅格的采样方式、矢量的符号化、栅格化要素大小、改变缓存格式等修改动做之后,原先建立的缓存文件也会被破坏,无法重复应用。
经研究ArcGlobe的缓存文件夹,发现所有缓存文件夹下,都有一个名为:
cache.lyr的文件,它可以用ArcGlobe打开并显示,也就说缓存文件夹下的cache.lyr可以用来重复应用,但只能与缓存数据在同一文件夹下使用,不能象其它.lyr那样,可以拷贝到其它位置使用。
解决办法:
(1)为了防止缓存文件的被无意识破坏,应该每次指定固定的Cache路径。
(2)为了防止缓存文件无效,应在建立数据的硬盘缓存之前首先应该设定好图层的栅格化大小、符号化、缓存格式等系列参数设置。
(3)设定好合理参数后,对所有图层数据分别创建缓存文件。
缓存创建完成后,打开ArcGlobe加载所有的cache.lyr文件,分别修改图层的名称,以及图层的可见距离,修改完成后保存成普通的layer文件。
(可以覆盖原来的cache.lyr也可以另存),普通的layer文件是可以非常容易移植的
(4)部署时只需要部署所有缓存文件夹,添加所有cache.lyr文件,重新保存地图文档即可。
(5)对于矢量数据缓存,部署完成后重新指定一下数据源,即可实现缓存数据的Identify和Find。
(缓存数据即提高了速度又能够轻松实现识别和查询,发现了ArcGlobe一大优势!
)
小结:
缓存应用创建、部署变得轻松简单,并且能够轻松实现识别和查询。
其它性能相关的一些设置:
(1)LevelofDetail选项损失图像和高程的质量提高浏览速度,(依据客户显示要求适当调整);
(2)Supendtilefetchingwhennavigating激活多线程,一个线程用于数据准备,另一用于浏览;
(3)DraftMode选项可以设置优化条件,但是显示效果大打折扣。
可以在导航时激活,定位后关闭。
工具条上有个比较方便的按钮
;
(4)Enablerenderingwithcompressedtextures激活Multipath数据DXT缓存格式。
6、“斑块补丁”问题
问题:
加入图层数据后会,只要系统没有找到合适的缓存文件(如:
当前显示比例,没建缓存等)系统就会自动生成按需缓存。
而建立缓存的时候,选择创建缓存的距离范围没有包含当前距离,这样在缓存文件部署的时候由于部分按需缓存的存在,显示时便有可能显示自动生成的那部分缓存,因而会有数据不能完整显示问题,屏幕上如同有斑块补丁一样。
解决:
改进了缓存建立方法:
先设置图层的symbol、Display等参数设置,关闭数据可视状态,删除缓存文件夹下面的所有历史缓存,图层上右键刷新,然后再建立缓存。
7、缓存文件超过20G,莫名退出、死机等问题;
分析:
缓存建立过程中,等高线一层数据文件就超过了20G。
建立缓存过程中机器常出现莫名退出、死机。
解决:
针对1:
25万实际数据,裁切水系、道路、等高线部分数据,建立18组缓存数据进行测试,发现原来建立缓存的设置并不是非常合理,于是从实际需求出发,重新确定了建立缓存比较合理的参数。
修改Cache目录大小,默认太小会死机。
增加了“线”内存缓存大小。
规范建立缓存的步骤,设置合理参数设置,并且动用IBMW700(当前最牛的移动图形工做站)协助测试,顺利完成数据缓存处理。
部分硬盘缓存大小情况如下表
数据
缓存级别、区间
缓存、占用硬盘空间
全国1:
25万等高线
12583km至12km
1.92G、2.2G
全国1:
25万水系
12583km至12km
576M、909M
全国1:
25万道路
12583km至12km
508M、825M
全国TM影像
12583km至25km
2.07G、2.35G
全国乡镇地名注记
3072m
8.01M、276M
经优化,10G数据量完全可以实现异地的分布式部署。
8、DEM缓存创建完成后不能显示高程
分析:
这是一个比较奇怪的问题,创建缓存过程也没有异常退出。
帮助上关于ArcGISServerGlobe缓存的一句话可以找到解决问题线索(AtArcGISServerversion9.3,rasterdataaselevationmustalwayshavethefulldatacachebuiltbeforebeingabletobeservedaspartofaglobeservice)。
全部缓存就是高程每个级别的缓存都需要创建,既然Globe服务中高程文件要创建全部缓存,那么桌面中的一定也差不多。
解决:
实际测试了下创建全部缓存(保持默认参数即可),加载cache.lyr后高程可以显示,并且高程缓存的级别也可以夸张。
注:
最低级别的缓存一定要创建,高级别可以不创建,但是具体前面几个高等级可以省略,依据具体数据而不同。
因为前面等级建立时间和数据量都非常少,建立全部缓存即可。
9、全部硬盘缓存文件比较琐碎,不便于移动、容易死机。
分析:
Windows自身的拷贝是单线程拷贝,拷贝大量琐碎数据效率不高,且在开始拷贝的时候数据统计就花费很长的时间,出现假死状态。
解决:
利用Richcopy多线程拷贝工具,能轻松实现缓存文件的移动、拷贝。
实际测试移动1G数据(大约100000个文件,2000个文件夹)需要15分钟左右(提高了一倍效率)即可。
10、三维模型速度优化
注记的显示速度还不够理想,对注记数据在不同比例尺下做了三组缓存,发现大比例尺情况下创建的缓存比小比例尺缓存漫游又有所提升(比较理想),并且创建缓存的时间竟然与比例尺大小没关系。
创建缓存时间跟比例尺大小无关这点跟栅格、矢量、高程完全不同却跟Multipath的数据比较像。
既然注记可以这么优化,那么是否Multipath数据也可以这么优化?
接下来就对Multipath数据创建缓存进行测试。
创建了几组缓存后,打开其中一个缓存文件,初始化后漫游发现速度超级快,(此前对Multipath做过处理,数据量比较大的时候漫游速度不理想,有一卡一卡的,栅格、矢量、高程、3Dvector速度都优化了,唯独Multipath速度不理想,总觉得有所缺憾。
)!
以前默认缓存的比例尺太小,这样导致缓存分块太大漫游时没法依据块距离进行过滤。
终于找到一直想要的效果了(玩赛车游戏的时候的体验),视野远处的数据不加载,推进的时候动态加载。
与Multipath速度优化有关的设置:
1、Don’tShowlayerwhenzoomed设置可见范围;
2、Checkvisbilitybasedoneachtiledistance对每一个缓存块的显示距离进行过滤(当设置可见范围后激活);
3、FeatureProperties设置图层的最小显示比例;
4、Supendtilefetchingwhennavigating激活多线程,一个线程用于数据准备
5、Enablerenderingwithcompressedtexturesdxt格式缓存对于显卡支持openGL性能好的机器能够提高显示速度;
6、将所有Multipath文件合并成一个文件,避免在文件过多刷新图层列表;
7、加载Cache.lyr缓存文件。
8、增加内存缓存中3Dobject(texturesand3Dgeometries)大小,内存小时增加计算机虚拟内存大小。
9、选择合适的显卡,较大的物理内存和纹理内存。
有点做鱼香肉丝的感觉,鱼香肉丝讲究小酸、小甜、小鲜、小咸、小辣五味具全,所以炒菜时一定注意原料的比例,ArcGlobe速度优化亦然,合适的参数设置、精心搭配、慢慢调制……
二、经验总结
1、硬盘缓存能够极大改进ArcGlobe的显示速度,并且易于部署。
2、栅格、矢量、高程、注记、3D模型的缓存参数都不相同,应该依据具体数据设置参数,并且规范缓存制作流程。
3、3D模型的缓存与注记优化类似,经过缓存处理,3D模型可以达到比较理想的浏览速度。
3D模型的Globe服务访问速度也可达到比较理想的效果。
(浏览3D模型需要增大内存缓存设置)。
4、通过此项目,总结了一套三维速度优化的方法和工艺流程,并发现了ArcGlobe不少优势。
三、结论
ArcGlobe平台是一个完整的工具平台,可以事先对源数据进行渲染设置,部分数据缓存测试等操作,且在矢量缓存中可以进行属性的识别和查询,再加上强大的分析功能,ArcGlobe在三维方面具有极为强大的优势。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS 三维 优化 方法