丢弃 ESRI 灰色'Map data not yet available'错误瓦片,回退父级放大
This commit is contained in:
@@ -241,10 +241,45 @@ export class CesiumGlobe {
|
|||||||
scene.maximumRenderTimeChange = Infinity; // 配合 requestRenderMode:静止时停止重绘,大幅省电省帧
|
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({
|
const imagery = new Cesium.UrlTemplateImageryProvider({
|
||||||
url: IMAGERY_URL,
|
url: IMAGERY_URL,
|
||||||
credit: 'Imagery © Esri, Maxar, Earthstar Geographics',
|
credit: 'Imagery © Esri, Maxar, Earthstar Geographics',
|
||||||
maximumLevel: 19,
|
maximumLevel: 19,
|
||||||
|
tileDiscardPolicy: discardNotAvailableTile,
|
||||||
});
|
});
|
||||||
const imageryLayer = new Cesium.ImageryLayer(imagery, {
|
const imageryLayer = new Cesium.ImageryLayer(imagery, {
|
||||||
// 卫星影像不覆盖极区(约 ±85° 外返回黑块),限制范围让极区用冰盖底色
|
// 卫星影像不覆盖极区(约 ±85° 外返回黑块),限制范围让极区用冰盖底色
|
||||||
|
|||||||
Reference in New Issue
Block a user