当前位置: 首页 > article >正文

arcgis for js实现地图截图、地图打印

地图截图

效果

在这里插入图片描述

实现

复制运行即可

要实现复杂的截图保存可以参考 官网案例

<!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" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" />
    <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'
        })

        // 创建2维视图
        let view = new MapView({
          container: 'mapview',
          map: map,
          zoom: 11,
          center: [104.783916597735, 32.55699155692144] // 设置地图的初始化中心点坐标
        })

        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自带的打印组件,可自选导出格式,方向等等

缺点是如果地图上有MapImageLayer等图层就会失效

效果

在这里插入图片描述

实现

<!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" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" />
    <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'
        })

        // 创建2维视图
        let view = new MapView({
          container: 'mapview',
          map: map,
          zoom: 11,
          center: [104.783916597735, 32.55699155692144] // 设置地图的初始化中心点坐标
        })

        document.querySelector('#btn').addEventListener('click', function () {
          const print = new Print({
            view: view,
            label: '提取',
            // 最好指定为自己的打印服务
            printServiceUrl: 'https://utility.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task'
          })

          // 将小部件添加到视图的右下角
          view.ui.add(print, 'bottom-right')
        })
      })
    </script>
  </body>
</html>

注意

打印服务最好使用自己的arcgisServer服务, 如何开启自行百度,当然这种事直接呼叫公司gis工程师咯


http://www.kler.cn/a/443367.html

相关文章:

  • BoltzGnu Boltztrap数据绘图脚本
  • 和为0的四元组-蛮力枚举(C语言实现)
  • uniapp实现后端数据i18n国际化
  • PostgreSQL学习笔记(二):PostgreSQL基本操作
  • Centos7使用yum工具出现 Could not resolve host: mirrorlist.centos.org
  • 运动相机拍摄的视频打不开怎么办
  • react身份证回显
  • 前端:如何在静态目录下显示一张图片
  • OpenCV(python)从入门到精通——运算操作
  • C++ 只出现一次的数字 - 力扣(LeetCode)
  • Golang的向前兼容性和toolchain规则,Go1.21.0
  • SpringBoot3整合FastJSON2如何配置configureMessageConverters
  • RabbitMQ的工作模型
  • DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services
  • Spring Boot 中异常日志记录的最佳实践:实时示例
  • .NET Runtime 是什么?
  • DNS协议 是什么?说说DNS 完整的查询过程?
  • 矩阵在资产收益(Asset Returns)中的应用:以资产回报矩阵为例(中英双语)
  • 使用 Django 和 AWS 实现自动同步 ECR 信息
  • 《算法ZUC》题目
  • C++算法第十一天
  • Scala快速入门+示例
  • html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>
  • 网页核心页面设计(第10章)
  • C语言:排序
  • uniapp v-tabs修改了几项功能,根据自己需求自己改