Esri 使用 Javascript 拍摄地图截图

Esri Take Map Scrrenshots using Javascript

我正在尝试使用 JavaScript 生成包含 ESRI 地图 当前地图屏幕截图的 pdf 报告。这是我的代码。

    var getCurrentMapScreenShot = function (success, error) {
                esriLoader.Config.defaults.io.proxyUrl = myAppSettingsModel.SettingsModel.MapSettings.AGSProxyURL;
                esriLoader.Config.defaults.io.alwaysUseProxy = true;
                var printTask = new esriLoader.PrintTask("myexportUrl");

                var template = new esriLoader.PrintTemplate();
                template.exportOptions = {
                    width: 600,
                    height: 600,
                    dpi: 96
                };
                template.format = "image/png";
                template.layout = "MAP_ONLY",
                template.preserveScale = true;
                template.layoutOptions = {
                    legendLayers: [], // empty array means no legend
                    scalebarUnit: "Miles"
                };
                var params = new esriLoader.PrintParameters();

                params.map = map;
                params.template = template;

                printTask.execute(params, success, error);
}

这个函数会给你一个包含 url 的事件,然后我传递这个 url 来获取地图 base64 数据。 这是函数调用。

map.GetCurrentMapScreenShot(function (event) {
                var mapScreenShotURL = event.url;
                Factory.GetBase64ForImgUrl(mapScreenShotURL, 
                function (mapImageBase64Encoded) {});

这里是将 url 转换为 base64image

的函数
function getBase64ForImgUrl(url, callback, outputFormat) {
            console.log("#################### Summary Report Image " + url);

            var canvas = document.createElement('CANVAS');
            var ctx = canvas.getContext('2d');
            var img = new Image;
            img.crossOrigin = 'Anonymous';
            img.onload = function () {
                canvas.height = img.height;
                canvas.width = img.width;
                ctx.drawImage(img, 0, 0);
                var dataURL = canvas.toDataURL(outputFormat || 'image/png');
                callback.call(this, dataURL);
                // Clean up
                canvas = null;
            };
            img.src = url;

        }

我正在获取地图的 base64 图像数据,但问题是,我得到的地图图像模糊,没有要素层和图标。地图还包含一些垃圾文本。

谢谢

我几乎解决了这个问题,现在我得到了包含地图图标和图层图形的地图图像,但不幸的是仍然得到一些垃圾文本。

我把代码改成如下。

        template.format = "JPG";
        template.layout = "A4 Landscape",
        template.preserveScale = false;
        template.layoutOptions = {
            "legendLayers": [], // empty array means no legend
            "scalebarUnit": "Miles"
        }