丢弃 ESRI 灰色'Map data not yet available'错误瓦片,回退父级放大

This commit is contained in:
2026-09-19 17:03:38 +08:00
parent 174f162565
commit 6256098a94
+35
View File
@@ -241,10 +241,45 @@ export class CesiumGlobe {
scene.maximumRenderTimeChange = Infinity; // 配合 requestRenderMode:静止时停止重绘,大幅省电省帧
// 卫星影像
// 检测 ESRI "Map data not yet available" 灰色错误瓦片并丢弃,自动回退父级放大
const discardNotAvailableTile = {
_canvas: document.createElement('canvas'),
_ctx: null,
isReady() {
return true;
},
shouldDiscardImage(image) {
try {
if (!this._ctx) {
this._ctx = this._canvas.getContext('2d', { willReadFrequently: true });
}
this._canvas.width = 8;
this._canvas.height = 8;
this._ctx.drawImage(image, 0, 0, 8, 8);
const d = this._ctx.getImageData(0, 0, 8, 8).data;
let gray = 0;
let total = 0;
for (let i = 0; i < d.length; i += 4) {
const r = d[i];
const g = d[i + 1];
const b = d[i + 2];
const mx = Math.max(r, g, b);
const mn = Math.min(r, g, b);
if (mx - mn < 15 && r > 110 && r < 240) gray++;
total++;
}
return total > 0 && gray / total > 0.92;
} catch (e) {
return false;
}
},
};
const imagery = new Cesium.UrlTemplateImageryProvider({
url: IMAGERY_URL,
credit: 'Imagery © Esri, Maxar, Earthstar Geographics',
maximumLevel: 19,
tileDiscardPolicy: discardNotAvailableTile,
});
const imageryLayer = new Cesium.ImageryLayer(imagery, {
// 卫星影像不覆盖极区(约 ±85° 外返回黑块),限制范围让极区用冰盖底色