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

OpenLayers 地图打印

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key

地图打印功能可以实现输出当前视窗范围内的地图,将图片保存到客户端。通过浏览器的截屏或者第三方插件实现地图导出功能。本节主要介绍加载地图打印

1. 实现方式

OpenLayers 5具有CanvasWebGL两种渲染模式,可以基于地图容器对象来实现导出图片功能,在教程中采用Canvas渲染方式,所以采用CanvastoDataURL方法导出地图。

map.once('postcompose', evt => {const canvas = evt.context.canvasele.href = canvas.toDataURL("image/png")ele.download = "地图"ele.click()
})

2. 完整代码

其中libs文件夹下的包需要更换为自己下载的本地包或者引用在线资源。

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>地图导出</title><meta charset="utf-8" /><script src="../libs/js/ol-5.3.3.js"></script><script src="../libs/js/jquery-2.1.1.min.js"></script><script src="../libs/js/mapbox-streets-v6-style.js"></script><link rel="stylesheet" href="../libs/css//ol.css"><style>* {padding: 0;margin: 0;font-size: 14px;font-family: '微软雅黑';}html,body {width: 100%;height: 100%;}#map {position: absolute;width: 100%;height: 100%;}.ol-mouse-position {padding: 5px;top: 10px;height: 40px;line-height: 40px;background: #060505ba;text-align: center;color: #fff;border-radius: 5px;}</style>
</head><body><div id="map" title="地图显示"></div><div class="load-div" onclick="exportMap()"><span>导出地图</span></div>
</body></html><script>//地图投影坐标系const projection = ol.proj.get('EPSG:3857');//==============================================================================////============================天地图服务参数简单介绍=============================////================================vec:矢量图层=================================////================================img:影像图层=================================////================================cva:注记图层=================================////======================其中:_c表示经纬度投影,_w表示球面墨卡托投影==============////=============================================================================//const TDTImgLayer = new ol.layer.Tile({title: "天地图影像图层",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=img_c&x={x}&y={y}&l={z}&tk=2a890fe711a79cafebca446a5447cfb2",attibutions: "天地图注记描述",crossOrigin: "anoymous",wrapX: false})})const TDTImgCvaLayer = new ol.layer.Tile({title: "天地图影像注记图层",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=cia_c&x={x}&y={y}&l={z}&tk=2a890fe711a79cafebca446a5447cfb2",attibutions: "天地图注记描述",crossOrigin: "anoymous",wrapX: false})})const map = new ol.Map({target: "map",loadTilesWhileInteracting: true,view: new ol.View({center: [11444274, 12707441],zoom: 5,worldsWrap: true,minZoom: 1,maxZoom: 20,projection: projection}),// 鼠标控件:鼠标在地图上移动时显示坐标信息。controls: ol.control.defaults().extend([// 加载鼠标控件new ol.control.MousePosition()])})map.addLayer(TDTImgLayer)map.addLayer(TDTImgCvaLayer)function exportMap() {const ele = document.createElement("a")ele.style.display = "none"map.once('postcompose', evt => {const canvas = evt.context.canvasele.href = canvas.toDataURL("image/png")ele.download = "地图"ele.click()})map.renderSync()}
</script>

OpenLayers示例数据下载,请回复关键字:ol数据

全国信息化工程师-GIS 应用水平考试资料,请回复关键字:GIS考试

【GIS之路】 已经接入了智能助手,欢迎关注,欢迎提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 !

http://www.xdnf.cn/news/721801.html

相关文章:

  • C++创建对象过程
  • 攻防世界-BadProgrammer
  • siglip2(2) Naflex模型的动态分辨率原理
  • 微信小店推客系统带来的便利性
  • IPTV电视直播 1.6.0 | 手机电视直播 秒播无卡顿
  • 短视频一键搬运 v1.7.1|短视频无水印下载 一键去重
  • 计算几何 视频截图
  • int和Integer的区别
  • vue3+element plus 关于el-dialog__body无法选中的问题
  • 掌握STP技术:网络环路终结者实战
  • cf2067A
  • 定位例子(vue3)
  • 告别RAG上下文丢失:Late Chunking 与 Contextual Retrieval 深度对比解析
  • 【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)
  • OTA中版本灰度发布、用户反馈闭环浅谈
  • 深度解构:Profinet转Profibus网关如何重塑产品分离装置的控制逻辑
  • 【测试】设计测试⽤例方法
  • 键盘录入的两套体系区别(Random)
  • 【速通RAG实战:进阶】16、AI生成思维导图全技术解析
  • SpringBoot(五)--- 异常处理、JWT令牌、拦截技术
  • python的高级2——函数作为对象
  • ⚽【足球数据全维度解析】从基础统计到高阶分析,数据如何重塑现代足球?
  • 中国国运新引擎:下一代液晶技术突破如何重塑全球显示格局
  • 通过粘性布局实现表格且带有固定列
  • 文件夹的命名与分类
  • Geoserver修行记--点击geoserver服务的WMTS能力(GetCapabilities)文档显示400 null
  • 第五十九节:性能优化-GPU加速 (CUDA 模块)
  • 2025-5-27Vue3快速上手
  • 软考-系统架构设计师-第八章 数据库设计基础知识
  • Lesson 25 Do the English speak English