功能需求:需要飞到一个场景截图一张,然后再刚飞到另一个地方再截图一张
涉及到同步和异步的问题,这里使用async,await,Promise解决
//md_Extents[j].md_Extent存放图形的边界四至, west,south,east,north
for (let i = 0; i < md_Extents[j].md_Extent.length; i++) {
await md_ExtentsFlyTo(md_Extents[j].md_Extent[i]);
}
//Canvas2Image通过html页引用Canvas2Image.js
function md_ExtentsFlyTo(data) {
var p = new Promise(function (resolve, reject) {
//做一些异步操作
setTimeout(() => {
viewer.camera.setView({
destination: Cesium.Rectangle.fromDegrees(data.extent[0], data.extent[1],
data.extent[2], data.extent[3]),
});
var imageWidth = 800;
var img = Canvas2Image.convertToImage(viewer.scene.canvas, imageWidth,
(imageWidth * viewer.scene.canvas.height) / viewer.scene.canvas.width, "png");
var base64url = viewer.scene.canvas.toDataURL("image/png");
var file = base64ImgtoFile(base64url);
//测试截图效果
/* var loadImg = document.createElement("a");
loadImg.href = img.src;
loadImg.download = "earth";
loadImg.click(); */
exportWordFiles.push(file);
exportWordGids.push(data.gid);
resolve("截完了");
}, 1000);
});
return p;
}
function base64ImgtoFile(dataurl) {
let arr = dataurl.split(",");
let filename = "file";
let mime = arr[0].match(/:(.*?);/)[1];
let suffix = mime.split("/")[1];
let bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], `${filename}.${suffix}`, {
type: mime,
});
}