openlayers6 屏幕繪制矩形截圖保存

DrawMap.js

/* 
    繪制矩形范圍,截圖保存到本地
 */
import VectorSource from 'ol/source/Vector';
import Draw, {
    createBox
} from 'ol/interaction/Draw'
import {
    Fill,
    Stroke,
    Style
} from 'ol/style';

// 繪制矩形后,截圖保存到本地
export function drawMap(map, imgName) {
    const source = new VectorSource({
        wrapX: false
    });
    let draw = new Draw({
        source: source,
        type: 'Circle',
        style: new Style({
            stroke: new Stroke({
                color: 'blue',
                width: 2,
            }),
            fill: new Fill({
                color: 'rgba(0, 0, 0, 0)',
            }),
        }),
        geometryFunction: createBox()
    })
    map.addInteraction(draw);
    draw.on('drawend', (evt) => {
        // source.clear();
        map.removeInteraction(draw);
        console.log(evt);
        map.renderSync();

        let extent = evt.feature.getGeometry().getExtent();
        //地理坐標轉(zhuǎn)換屏幕坐標 
        let coord = [extent[0], extent[3]];
        let leftTopPosition = map.getPixelFromCoordinate(coord);
        let coord1 = [extent[2], extent[1]];
        let bottomRightPosition = map.getPixelFromCoordinate(coord1);
        //計算框選矩形的寬度以及高度像素
        let width = Math.abs(bottomRightPosition[0] - leftTopPosition[0]);
        let height = Math.abs(bottomRightPosition[1] - leftTopPosition[1]);
        //計算框選矩形的左上角屏幕坐標
        let minx = leftTopPosition[0];
        let miny = leftTopPosition[1];
        //創(chuàng)建canvas元素 
        let mapCanvas = document.getElementsByClassName("ol-layer")[0].children[0];
        let imageData = mapCanvas.getContext("2d").getImageData(minx, miny, width, height);
        let canvas = document.createElement("canvas");
        canvas.width = width;
        canvas.height = height;
        canvas.getContext("2d").putImageData(imageData, 0, 0);
        let dataUrl = canvas.toDataURL(); //轉(zhuǎn)換圖片為dataURL
        let link = document.createElement('a');
        link.download = imgName;
        link.href = dataUrl;
        link.click();
        console.log("截圖成功");
    })
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椰憋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子个榕,更是在濱河造成了極大的恐慌满钟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堤魁,死亡現(xiàn)場離奇詭異委乌,居然都是意外死亡添谊,警方通過查閱死者的電腦和手機刷喜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門残制,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掖疮,你說我怎么就攤上這事初茶。” “怎么了浊闪?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵恼布,是天一觀的道長。 經(jīng)常有香客問我搁宾,道長折汞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任盖腿,我火速辦了婚禮字支,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸忽。我一直安慰自己,他們只是感情好揖庄,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布栗菜。 她就那樣靜靜地躺著,像睡著了一般蹄梢。 火紅的嫁衣襯著肌膚如雪疙筹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天禁炒,我揣著相機與錄音而咆,去河邊找鬼。 笑死幕袱,一個胖子當著我的面吹牛暴备,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播们豌,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼涯捻,長吁一口氣:“原來是場噩夢啊……” “哼浅妆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起障癌,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凌外,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涛浙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體康辑,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年轿亮,在試婚紗的時候發(fā)現(xiàn)自己被綠了疮薇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡哀托,死狀恐怖惦辛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仓手,我是刑警寧澤胖齐,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嗽冒,受9級特大地震影響呀伙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜添坊,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一剿另、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贬蛙,春花似錦雨女、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至野蝇,卻和暖如春讼稚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绕沈。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工锐想, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乍狐。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓赠摇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝉稳,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容