背景:
动态地图服务在三维场景下不仅慢,而且显示相对模糊。ArcGIS API for JavaScript。
现象归纳:
默认情况下,会以2048*2048的size。请求两次投影后范围为xmin ymin xmax ymax的一个区域的地图。
请求1:(xmax-xmin)/2048 = view.zoom(近似取整)-1 对应级别的resolution
请求2:(xmax-xmin)/2048 =view.zoom(近似取整)-2级别的resolution(范围较大的一次请求)。
思路:
要改进模糊问题,识别resolution较小的一次请求,尝试更改size为4096
要改进慢的问题,识别和阻断resolution值过大的一次请求。或尝试更改size为1024。
一旦视角倾斜。范围较大的请求resolution更大。对应的lod的zoom层级view.zoom - n n更大。
同事挖掘的用户需求:高分屏加速。
1.在不存在效率问题的环境下让地图模糊问题更加清晰。
2.自定义切片图层适应高分屏,提高效率。
2022年6月28日测试,清晰度无法通过调整width和height图片大小解决。请求来的图片不是简单贴在该位置,渲染引擎使他模糊。请求来的图片直接查看是很清晰的。
清晰问题解决方法:
增大DPI,如调整96为120。同时稍微调节width和height x1.05 或不调节图片大小,直接使用MapImageLayer设置dpi为120在SceneView中即可。文字能够更加清晰。调整完DPI后,图片大小也减小了,带宽问题也得到缓解。
大范围请求导致效率问题的解决方法:
使用BaseDynamicLayer创建自定义动态图层。重写fetchImage方法。
以上代码算是针对现象归纳理论的实践。
弊端:
视角平视,远处地图级别和近处不一样,远处更为模糊,有种早版本的API的SceneView下的切片图层的割裂的感觉。这就是追求效率带来的不清晰的一点弊端。
还是建议设置SceneView.constraints。稍微限制一下倾斜视角,如果不是在看具体建筑物的时候。