zoukankan      html  css  js  c++  java
  • leaflet地图全图以及框选截图导出功能(附源码下载)

    前言

    leaflet 入门开发系列环境知识点了解:

    内容概览

    leaflet地图截图导出功能
    源代码demo下载

    效果图如下:

    本篇主要参考截图插件domtoimage:https://github.com/tsayen/dom-to-image
    地图全图导出直接用上面的domtoimage插件,然后矩形框选截图导出也是在domtoimage插件基础上自己计算矩形范围来实现的

    • 部分代码,完整的见源码demo下载
    <script> 
     var geojsonLayer = null; 
     var map = L.map('map'); 
      L.tileLayer('http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',{crossOrigin:true}).addTo(map); 
     
      map.setView(L.latLng(22.95186415, 113.90271877), 14);  //设置缩放级别及中心点 
     
      map.pm.addControls({ 
     position: 'topleft', 
     drawCircle: false, 
     drawMarker:false, 
     drawCircleMarker:false, 
     drawPolyline:false, 
     drawRectangle:false, 
     drawPolygon:false, 
     cutPolygon:false, 
     removalMode:false, 
     editMode:false, 
     dragMode:false 
      }); 
     //参考截图插件:https://github.com/tsayen/dom-to-image 
     var node = document.getElementById('map'); 
      $("#mapexport_btn").click(function(){ 
          domtoimage.toJpeg(node, { quality: 1.0 }) 
            .then(function (dataUrl) { 
     var link = document.createElement('a'); 
                link.download = '全图导出.jpeg'; 
                link.href = dataUrl; 
                link.click(); 
            }); 
      }); 
      $("#rctanglexport_btn").click(function(){ 
     //绘制矩形 
          map.pm.enableDraw("Rectangle", { 
     finishOn: "dblclick", 
     allowSelfIntersection: false, 
     tooltips: false 
          }); 
      }); 
      map.on('pm:create', e => { 
     //console.log(e); 
        geojsonLayer = e.layer; 
        geojsonLayer.addTo(map); 
     
     var northEast =  e.layer.getBounds()._northEast; 
     var southWest =  e.layer.getBounds()._southWest; 
     //框选矩形的中心点 
     var centerPoint = L.latLng( 
              (northEast.lat + southWest.lat) / 2.0, 
              (northEast.lng + southWest.lng) / 2.0 
        ); 
     //地理坐标转换屏幕坐标 
     var northEastPoint = map.latLngToContainerPoint(northEast); 
     var southWestPoint = map.latLngToContainerPoint(southWest); 
     ……
     ……
     
     if(geojsonLayer){ 
             map.removeLayer(geojsonLayer); 
             geojsonLayer = null; 
        } 
        domtoimage 
              .toPng(node) 
              .then(function(dataUrl) { 
     if (dataUrl.length <= 6) { 
     console.log("屏幕截图结果为空,建议放大地图,重新截图操作试试看"); 
     return; 
                } 
     //过渡img图片,为了截取img指定位置的截图需要 
     var img = new Image(); 
                img.src = dataUrl; 
                img.onload = function() { 
                   ……
                   ……
                }; 
              }) 
              .catch(function(error) { 
     console.error("oops, something went wrong!", error); 
              }); 
      }); 
    </script> 

    完整demo源码见小专栏文章尾部小专栏

    文章尾部提供源代码下载,对本专栏感兴趣的话,可以关注一波

  • 相关阅读:
    7.9 C++ STL算法
    7.8 C++容器适配器
    7.7 C++基本关联式容器
    Django项目静态文件加载失败问题
    Centos6.5安装mysql5.7详解
    使用Xshell上传下载文件
    linux中MySQL本地可以连接,远程连接不上问题
    Linux常用命令
    Linux环境安装python3
    python 字符串最长公共前缀
  • 原文地址:https://www.cnblogs.com/giserhome/p/12590932.html
Copyright © 2011-2022 走看看