三维数据的效率一直是个瓶颈,特别是在Web端浏览一直是个问题,在IE内存限制1G的条件下,对于三维数据动不动几十G的数据量,这1G显得多么微不足道。虽然现在三维平台都是分级加载,或者在程序中采用数据分不同片区加载来降低一次性加载的模型数据,但是在浏览器中浏览三维数据崩溃问题仍然一直存在。最近在维护一个老的Skyline的项目,客户提出了在看二维数据的同时也可以看三维数据,需求很简单,实现也很容易,唯一的问题是浏览效率,能不能浏览?浏览效率怎么样?而且政府单位的电脑配置都是很一般。毕竟也做了这么多年的Skyline开发,明知有挑战,那就干吧。
首先,拿到项目的三维数据,一看数据量40几G,分了21个模型片区,每个片区差不多5平方公里,片区里面分了建筑模型图层和其他模型图层,建筑图层是shp+xpl2,模型图层是3dml。那就先试试数据本在本地,建个Web浏览页面,在自己4G显存,16G内存的机器上跑一下。发现建筑模型初始时可以看见,浏览一会消失后,再回来看建筑模型,死活加载不出来了,一看IE内存800M了,显然其他模型图层(3dml格式)把内存都占满了,流模式加载的建筑模型被“抛弃了”。显然直接使用现有数据这种方式是不行的了。
第二,既然xp2+3dml 这种组合不行,那就我房屋模型也打包成3dml,打包后5平方公里竟然有4G多的数据。数据在本地,在页面上浏览,好了,不会出现建筑消失后再也加载不出来的情况了,但是IE内存也接近1G,CPU可以达到60%以上,我这CPU是i5 3.30G,各种不稳定因素,这种方法也不行。
第三,Skyline 出了7.0版本,是64位的软件,那就来试下在Web端,修改web页面ActiveX 控件,结果发现竟然不支持,说是IE32位不支持64位程序,怎么改都不行,那这方法也不行。不过Pro7.0 在PC端加载数据的效率确实高,应用程序占用内存能达到3G以上,6.6版本 扩展大内存后,也只能达到2.5G左右。以后64位系统是趋势,skyline7.0 ,伟景行8.0版本,ArcGIS Pro 都是64位的,超图的8C还没关注,应该都是了。
第四,那只有考虑降低数据精度了,跟客户商量下,保证效率和文档性的前提下,可以降低模型精度。那怎么降低呢,首先数据肯定是3dml 格式的了,现在一个片区其他模型有1G的大小,建筑4G大小。降低原则,先把数据量降低一倍,其他模型数据在规划行业中相对没那么重要,可以适当降低。利用CityBuilder 把其他模型数据的精度改为0.5p/m,发现数据量将为500M,房屋模型精度改为0.25p/m 和0.125p/m,生成后0.25P/m大小位2.4G,0.125p/m位3.1G。实际发现0.25p/m的数据精度太差了。那就把0.125p/m的房屋和0.5p/m的其他模型在web端浏览,发现IE占用内存也是800多M,但是CPU 使用最大也就40%多。似乎内存问题还是没能解决。这里有个基本的标准1平方公里房屋模型400M,其他模型100M为最佳效果浏览效果,纯经验。
以上过程说明,只要skyline浏览数据量超过1G,IE占用的内存肯定会达到IE的限制,要解决性能问题,一个还是要尽量分区,分区范围小一点,第二点就是要用3dml格式数据,第三还是降低一些数据精度。
.