cesium 地图对当前画面截图,下载

发布时间 2023-09-07 16:56:22作者: 博客sl

 

 


    captureScreenshot() {
        const { viewer } = this.state
        const { when } = Cesium;
        const deferred = when.defer();
        const scene = viewer.scene;
        var removeCallback = scene.postRender.addEventListener(function () {
            removeCallback();
            try {
                const cesiumCanvas = viewer.scene.canvas;

                // If we're using the splitter, draw the split position as a vertical white line.
                let canvas = cesiumCanvas;
                // canvas.toBlob(function (blod) {
                //     deferred.resolve(blod);
                // }, "image/png");
                deferred.resolve(canvas.toDataURL("image/png"));
            } catch (e) {
                deferred.reject(e);
            }
        }, this);
        scene.render(viewer.clock.currentTime);

        return deferred.promise;
    }

    saveAs(blob, filename) {
        if (blob === null) {
            return;
        }
        if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveBlob(blob, filename);
        } else {
            const target = document.createElement("a");
            const body = document.querySelector("body");
            target.href = window.URL.createObjectURL(blob);
            target.download = filename;
            target.style.display = "block";
            body.appendChild(target);
            target.click();
            body.removeChild(target);
            window.URL.revokeObjectURL(target.href);
         
        }
    }

    saveCanvasToImg() {
        const $promise = this.captureScreenshot();
        if ($promise) {
          $promise.then((blob) => {
            this.setState({dataURL:blob})
            // 获取地图数据,下载
            // blob && this.saveAs(blob, `${Date.now()}.png`);
          });
        }
    }