arcgis for js實(shí)現(xiàn)地圖截圖、地圖打印功能
地圖截圖
效果
實(shí)現(xiàn)
復(fù)制運(yùn)行即可
要實(shí)現(xiàn)復(fù)雜的截圖保存可以參考 官網(wǎng)案例
<!DOCTYPE html> <html lang="zn"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> #mapview { width: 100vw; height: 100vh; } * { margin: 0; padding: 0; } #btn { position: fixed; right: 30px; top: 10px; z-index: 999; width: 100px; height: 40px; cursor: pointer; } </style> <link rel="stylesheet" rel="external nofollow" rel="external nofollow" /> <script src="https://js.arcgis.com/4.23/"></script> </head> <body> <button id="btn">地圖截圖</button> <div id="mapview"></div> <script> require(['esri/Map', 'esri/views/MapView', 'esri/layers/FeatureLayer'], function ( Map, MapView, FeatureLayer ) { // 初始化底圖 window.map = new Map({ basemap: 'dark-gray-vector' }) // 創(chuàng)建2維視圖 let view = new MapView({ container: 'mapview', map: map, zoom: 11, center: [104.783916597735, 32.55699155692144] // 設(shè)置地圖的初始化中心點(diǎn)坐標(biāo) }) document.querySelector('#btn').addEventListener('click', function () { view .takeScreenshot({ area: { x: 0, y: 0, width: view.width, height: view.height }, format: 'png' }) .then(screenshot => { // 直接下載 const base64 = screenshot.dataUrl.toString() // imgSrc 就是base64哈 const byteCharacters = atob(base64.replace(/^data:image\/(png|jpeg|jpg);base64,/, '')) const byteNumbers = new Array(byteCharacters.length) for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i) } const byteArray = new Uint8Array(byteNumbers) const blob = new Blob([byteArray], { type: undefined }) const aLink = document.createElement('a') aLink.download = '圖片名稱.jpg' //這里寫(xiě)保存時(shí)的圖片名稱 aLink.href = URL.createObjectURL(blob) aLink.setAttribute('crossOrigin', 'anonymous') aLink.click() }) }) }) </script> </body> </html>
地圖打印
使用arcgis自帶的打印組件,可自選導(dǎo)出格式,方向等等
缺點(diǎn)是如果地圖上有MapImageLayer等圖層就會(huì)失效
效果
實(shí)現(xiàn)
<!DOCTYPE html> <html lang="zn"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> #mapview { width: 100vw; height: 100vh; } * { margin: 0; padding: 0; } #btn { position: fixed; right: 30px; top: 10px; z-index: 999; width: 100px; height: 40px; cursor: pointer; } </style> <link rel="stylesheet" rel="external nofollow" rel="external nofollow" /> <script src="https://js.arcgis.com/4.23/"></script> </head> <body> <button id="btn">地圖打印</button> <div id="mapview"></div> <script> require([ 'esri/Map', 'esri/views/MapView', 'esri/layers/FeatureLayer', 'esri/Graphic', 'esri/widgets/Print' ], function (Map, MapView, FeatureLayer, Graphic, Print) { // 初始化底圖 window.map = new Map({ basemap: 'dark-gray-vector' }) // 創(chuàng)建2維視圖 let view = new MapView({ container: 'mapview', map: map, zoom: 11, center: [104.783916597735, 32.55699155692144] // 設(shè)置地圖的初始化中心點(diǎn)坐標(biāo) }) document.querySelector('#btn').addEventListener('click', function () { const print = new Print({ view: view, label: '提取', // 最好指定為自己的打印服務(wù) printServiceUrl: 'https://utility.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task' }) // 將小部件添加到視圖的右下角 view.ui.add(print, 'bottom-right') }) }) </script> </body> </html>
注意
打印服務(wù)最好使用自己的arcgisServer服務(wù), 如何開(kāi)啟自行百度,當(dāng)然這種事直接呼叫公司gis工程師咯
到此這篇關(guān)于arcgis for js實(shí)現(xiàn)地圖截圖、地圖打印的文章就介紹到這了,更多相關(guān)arcgis for js地圖截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript鼠標(biāo)移動(dòng)事件以及實(shí)戰(zhàn)案例
在學(xué)習(xí)JS中我對(duì)鼠標(biāo)移動(dòng)事件進(jìn)行了一些總結(jié),需要的可以作參考,下面這篇文章主要給大家介紹了關(guān)于JavaScript鼠標(biāo)移動(dòng)事件以及實(shí)戰(zhàn)案例的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05常用的JavaScript驗(yàn)證正則表達(dá)式匯總
這篇文章主要是對(duì)常用的JavaScript驗(yàn)證正則表達(dá)式進(jìn)行了詳細(xì)的匯總介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11關(guān)于Javascript中defer和async的區(qū)別總結(jié)
相信看過(guò)javascript高級(jí)程序設(shè)計(jì)的人,在javascript高級(jí)程序設(shè)計(jì)里,應(yīng)該看到了介紹了有關(guān)defer和async的區(qū)別,可是比較淺顯,而且也說(shuō)得不是很清楚。下面我們來(lái)通過(guò)這篇文章來(lái)詳細(xì)了解下dfer和async的區(qū)別。2016-09-09JavaScript超詳細(xì)實(shí)現(xiàn)網(wǎng)頁(yè)輪播圖
這篇文章主要介紹了JavaScript超詳細(xì)實(shí)現(xiàn)網(wǎng)頁(yè)輪播圖,我們經(jīng)常會(huì)看到各種輪播圖的效果,它們到底是怎樣實(shí)現(xiàn)的呢?今天我們就一起來(lái)看一下具體實(shí)現(xiàn)方法吧2021-12-12JS 實(shí)現(xiàn)導(dǎo)航欄懸停效果(續(xù)2)
發(fā)現(xiàn)原來(lái)的方法還有是有幾個(gè)問(wèn)題:首先Js代碼冗余,導(dǎo)航條上的Tab是用js實(shí)現(xiàn)跳轉(zhuǎn)而不是超鏈接,還有導(dǎo)航條本身用fixed定位,但沒(méi)有被設(shè)置為水平居中,而是在JS中更改left值使其居中2013-09-09vue 自定義指令directive的使用場(chǎng)景
這篇文章主要詳細(xì)介紹了vue 自定義指令directive的使用場(chǎng)景,文中有詳細(xì)的代碼示例,感興趣的小伙伴歡迎閱讀2023-04-04TypeScript新特性之using關(guān)鍵字的使用方法
TypeScript 5.2版本中新添加了using關(guān)鍵字,目前該關(guān)鍵字的提案也進(jìn)入了ECMAScript的Stage 3,也就是說(shuō)很快就會(huì)進(jìn)入JavaScript語(yǔ)言本身中,using和const, let和var一樣都是用于變量聲明的,那么它到底有什么與眾不同的地方呢,本文給大家介紹的非常詳細(xì)2023-11-11