mineMap地图截图,mineMap示例中心说明:http://minedata.cn/minemapapi/demo/index.html#map_screen_shot
具体实现:
- 引入js: //minedata.cn/minemapapi/demo/js/canvas2image.js
- 地图初始化时,打开保留绘制缓存:
var map = new minemap.Map({
container: 'map',
style: "//minedata.cn/service/solu/style/id/2365",
center: [116.46,39.92],
zoom: 14,
pitch: 0,
maxZoom: 17,
minZoom: 3,
preserveDrawingBuffer: true //保留绘制缓存 默认为false,
//如果设置为true,地图渲染效率会有所下降;备注:需要地图截屏时,需要将改参数设置为true
});
- 如果仅截图底图以及addLayer方法添加的渲染图层,示例中方法即可
若涉及echart绘制效果叠加截取,按照如下方法:
①截图方法:
let pixRatio = this.getPixRatio(); //获取不同屏幕分辨率下的像素比(包括缩放状态)
if (echartLayer) {
//获取echart画布-透明背景
let offcanvas = env.echartLayer.chart.getRenderedCanvas({
pixelRatio: pixRatio,
backgroundColor: 'transparent'
});
//获取minemap画布
let asd = document.getElementsByClassName('minemap-canvas')[0];
let cwidth = asd.width, cheight = asd.height;
//新建画布
let mycanvas = document.createElement('canvas');
mycanvas.height = cheight;
mycanvas.width = cwidth;
//将以上渲染画布叠加到新建画布上
mycanvas.getContext("2d").drawImage(c, 0, 0);
mycanvas.getContext("2d").drawImage(offcanvas, 0, 0, cwidth, cheight, 0 , 0, cwidth, cheight);
//保存
let img_data1 = Canvas2Image.saveAsJPEG(mycanvas, true).getAttribute('src');
//下载
this.saveFile(img_data1, `${fileName}.jpg`);
}
②getPixRatio方法,获取像素比:
此方法是解决不同分辨率下,以及缩放状态下,echat和地图位置偏移的问题
getPixRatio() {
let ratio = 0,
screen = window.screen,
ua = navigator.userAgent.toLowerCase();
if (window.devicePixelRatio !== undefined) {
ratio = window.devicePixelRatio;
}
else if (~ua.indexOf('msie')) {
if (screen.deviceXDPI && screen.logicalXDPI) {
ratio = screen.deviceXDPI / screen.logicalXDPI;
}
}
else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
ratio = window.outerWidth / window.innerWidth;
}
if (ratio) {
ratio = Math.round(ratio * 100)/100;
}
return ratio;
},
③ 图片保存并自动下载的方法
saveFile(data, filename) {
let save_link = document.createElement('a');
save_link.href = data;
save_link.download = filename;
let event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
save_link.dispatchEvent(event);
}
``