目录
- 1、综述
- 2、sceneview.qualitySettings
- 2.1、sceneview.qualitySettings.memoryLimit
- 2.2、lodFactor
- 2.3 additionalCacheMemory
- 3、结论
1、综述
先上重点,SceneView.qualitySettings为隐藏对象参数,该对象的memoryLimit和lodFactor等值,可以修改当前可见区域加载的内存大小,并且可以修改当前场景中加载的模型的lod的层级(控制相同视角下的模型的粗糙度)。
对于ArcGIS For JavaScript,只能从SceneViewPerformanceInfo对象下图参数中看到与内存相关的内容:
对于这些内存的内容,我们能够了解到当前场景中使用的内存大小,以及能够允许的最大内存,但是却不能去直接设置当前场景可加载的内存大小。
通过下面代码,可以打印一下SceneView对象的信息。
const view = new SceneView({container: "viewDiv",map: map,});view.when(function () {console.log(view)})
在我们常用的qualityProfile下面有一个qualitySettings的参数,这个就是我们今天要降到的隐藏参数。
2、sceneview.qualitySettings
对于qualitySettings的研究后,目前有可见效果的参数有以下几个:
- memoryLimit:设置当前可见区域内的最大加载内存
- lodFactor:设置当前场景中模型的lod级别
- additionalCacheMemory:设置缓存本地的内存大小。
下面分别介绍这几个参数。
2.1、sceneview.qualitySettings.memoryLimit
我们知道SceneView场景中qualityProfile参数设置为high, medium 和low的时候,其对应的memoryLimit的值是不一样的,如下:
这个memoryLimit其实就是限制了当前可见区域的数据加载的对大值,例如,当讲sceneview.qualitySettings.memoryLimit值设置为50MB的时候,出现如下情况。
- 模型再拖动的时候出现缺块问题。
- 后台报内存溢出。
这个缺块就是因为当前可见区域内存太小,导致加载其他数据时会先删除之前加载的缓存,再去加载新的,删除的时候就会导致缺块问题。
因此当遇到后台报内存错误问题,或者页面在加载的时候出现缺块问题,可以通过调整sceneview.qualitySettings.memoryLimit去解决。
2.2、lodFactor
lodFactor主要是修改当前模型限制的lod级别,默认为1,当设置为0.5的时候,模型限制的比较粗糙,当设置为2的时候,模型限制的比较精细。
sceneview.qualitySettings下有个sceneService对象,下面可以看到有integratedMesh(倾斜模型)、object(3d object模型)、point(点模型)、pointCloud(点云模型)等对象。
用倾斜举例,可以看到integratedMesh下面有个lodFactor的值。
默认情况:
lodFactor=0.1时:
view.qualitySettings.sceneService['integratedMesh'].lodFactor = 0.1;
lodFactor=2时
view.qualitySettings.sceneService['integratedMesh'].lodFactor = 2;
因此,当需要在特定场景对模型的精细度要求比较严格的时候,可以通过调整lodFacrtor的值进行修改。
2.3 additionalCacheMemory
additionalCacheMemory主要是设置当前页面缓存到本地硬盘的大小的变量,可以将需要预览的数据提前缓存到本地,下次浏览的时候提升加载速度。但是这种情况再页面刷新后会本清除。
3、结论
- 当模型数据比较大的时候,模型加载出现缺块问题,可通过修改memoryLimit值进行测试。但是大小不能太大,需要考虑浏览器的压力。
- 当场景在不同情况下对模型的精度要求很严格的时候,或者需要降低模型质量去提升加载效率的时候,可通过修改lodFactor。
- additionalCacheMemory主要是设置当前页面缓存到本地硬盘的大小的变量,可以将需要预览的数据提前缓存到本地,下次浏览的时候提升加载速度。但是这种情况再页面刷新后会本清除。