arcgis for js實現(xiàn)地圖截圖、地圖打印功能
地圖截圖
效果
實現(xiàn)
復(fù)制運行即可
要實現(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è)置地圖的初始化中心點坐標(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' //這里寫保存時的圖片名稱 aLink.href = URL.createObjectURL(blob) aLink.setAttribute('crossOrigin', 'anonymous') aLink.click() }) }) }) </script> </body> </html>
地圖打印
使用arcgis自帶的打印組件,可自選導(dǎo)出格式,方向等等
缺點是如果地圖上有MapImageLayer等圖層就會失效
效果
實現(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è)置地圖的初始化中心點坐標(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ù), 如何開啟自行百度,當(dāng)然這種事直接呼叫公司gis工程師咯
到此這篇關(guān)于arcgis for js實現(xiàn)地圖截圖、地圖打印的文章就介紹到這了,更多相關(guān)arcgis for js地圖截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript鼠標(biāo)移動事件以及實戰(zhàn)案例
在學(xué)習(xí)JS中我對鼠標(biāo)移動事件進(jìn)行了一些總結(jié),需要的可以作參考,下面這篇文章主要給大家介紹了關(guān)于JavaScript鼠標(biāo)移動事件以及實戰(zhàn)案例的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05關(guān)于Javascript中defer和async的區(qū)別總結(jié)
相信看過javascript高級程序設(shè)計的人,在javascript高級程序設(shè)計里,應(yīng)該看到了介紹了有關(guān)defer和async的區(qū)別,可是比較淺顯,而且也說得不是很清楚。下面我們來通過這篇文章來詳細(xì)了解下dfer和async的區(qū)別。2016-09-09JavaScript超詳細(xì)實現(xiàn)網(wǎng)頁輪播圖
這篇文章主要介紹了JavaScript超詳細(xì)實現(xiàn)網(wǎng)頁輪播圖,我們經(jīng)常會看到各種輪播圖的效果,它們到底是怎樣實現(xiàn)的呢?今天我們就一起來看一下具體實現(xiàn)方法吧2021-12-12JS 實現(xiàn)導(dǎo)航欄懸停效果(續(xù)2)
發(fā)現(xiàn)原來的方法還有是有幾個問題:首先Js代碼冗余,導(dǎo)航條上的Tab是用js實現(xiàn)跳轉(zhuǎn)而不是超鏈接,還有導(dǎo)航條本身用fixed定位,但沒有被設(shè)置為水平居中,而是在JS中更改left值使其居中2013-09-09TypeScript新特性之using關(guān)鍵字的使用方法
TypeScript 5.2版本中新添加了using關(guān)鍵字,目前該關(guān)鍵字的提案也進(jìn)入了ECMAScript的Stage 3,也就是說很快就會進(jìn)入JavaScript語言本身中,using和const, let和var一樣都是用于變量聲明的,那么它到底有什么與眾不同的地方呢,本文給大家介紹的非常詳細(xì)2023-11-11