Cesium 3D地图设置缩放最小最大级别后地球缩小问题求解
问题原因
你混淆了影像瓦片加载等级限制和相机缩放范围限制两个完全不同的配置项:
你在Cesium.IonImageryProvider中设置minimumLevel: 5,是强制该影像图层仅加载第5级及以上精度的瓦片,当视角拉远到需要加载1-4级瓦片才能铺满整个地球时,Cesium找不到对应等级的瓦片资源,只能通过缩小地球尺寸、用现有5级瓦片拼接可见区域的方式兜底,就会出现你遇到的地球整体缩小的异常。
解决方案
根据你的实际需求选择对应方案即可:
方案1:限制用户缩放范围(推荐)
如果你只是要控制用户能拉远/拉近的最大/最小程度,不要修改影像图层的瓦片等级配置,直接限制相机的高度阈值即可:
var viewer = new Cesium.Viewer("cesiumContainer"); var layers = viewer.scene.imageryLayers; // 影像provider不需要配置minimumLevel、maximumLevel var blackMarble = layers.addImageryProvider(new Cesium.IonImageryProvider({ assetId: 3812 })); // 最小缩放限制:相机距离地球表面的最小高度(拉到最远的限制,数值越大能拉的越远) viewer.scene.screenSpaceCameraController.minimumZoomDistance = 10000000; // 单位:米,可根据需求调整数值 // 最大缩放限制:相机距离地球表面的最大高度(拉到最近的限制,数值越小能拉的越近) viewer.scene.screenSpaceCameraController.maximumZoomDistance = 1000; // 单位:米,可根据需求调整数值
该方案性能更优,也不会出现渲染异常。
方案2:保留瓦片等级限制,修复渲染异常
如果你确实需要限制影像图层仅加载指定等级范围内的瓦片,避免加载过粗/过细的瓦片资源,需要同时配置瓦片丢弃策略,避免低等级无瓦片时出现地球缩小:
var viewer = new Cesium.Viewer("cesiumContainer"); var layers = viewer.scene.imageryLayers; var blackMarble = layers.addImageryProvider(new Cesium.IonImageryProvider({ assetId: 3812, minimumLevel : 5, // 最小加载瓦片等级 maximumLevel: 18, // 最大加载瓦片等级,按需设置 // 配置永不丢弃瓦片,低等级区域用现有高等级瓦片拉伸填充 tileDiscardPolicy: new Cesium.NeverTileDiscardPolicy() }));
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

