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

maptalks在地图中进行矩形绘制,并把绘制区域截图下载

maptalks在地图中进行矩形绘制,并把绘制区域截图下载

<!DOCTYPE html>
<html>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>交互 - 绘制工具</title>
<style type='text/css'>html,body {margin: 0px;height: 100%;width: 100%;}.container {width: 100%;height: 100%;}
</style>
<link rel='stylesheet' href='https://maptalks.com/api/maptalks-gl.css' />
<script type='text/javascript' src='https://maptalks.com/api/maptalks-gl.js'></script><body><div id="map" class="container"></div><script>const map = new maptalks.Map("map", {center: [113.049, 51.498568],zoom: 8,baseLayer: new maptalks.TileLayer("base", {urlTemplate: "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",subdomains: ["a", "b", "c", "d"],attribution: "&copy; <a href='http://osm.org'>OpenStreetMap</a> contributors, &copy; <a href='https://carto.com/'>CARTO</a>",}),});let startPoint, rectangle, endPoint;const layer = new maptalks.VectorLayer("vector").addTo(map);const drawTool = new maptalks.DrawTool({mode: "Point",}).addTo(map).disable();drawTool.on("drawend", function (param) {console.info(param.geometry);console.log(param.geometry.getCoordinates());// 获取绘制的矩形图形对象const rectangle = param.geometry;// 获取矩形外接矩形范围(西南角/东北角坐标)const extentRange = rectangle.getExtent();console.log('西北角(左上):', extentRange.xmin, extentRange.ymax)console.log('东北角(右上):', extentRange.xmax, extentRange.ymax);console.log('东南角(右下):', extentRange.xmax, extentRange.ymin)console.log('西南角(左下):', extentRange.xmin, extentRange.ymin);layer.addGeometry(param.geometry);startPoint = {x: extentRange.xmin,y: extentRange.ymax}endPoint = {x: extentRange.xmax,y: extentRange.ymin}// const extent = maptalks.Coordinate.getExtent(startPoint, endPoint);const extent = rectangle.getExtent();// 获取地图Canvasconst canvas = map.getRenderer().canvas;// 转换坐标到屏幕像素const min = map.coordinateToContainerPoint(extent.getMin());const max = map.coordinateToContainerPoint(extent.getMax());console.log(min, max);// 创建临时Canvasconst tempCanvas = document.createElement('canvas');const ctx = tempCanvas.getContext('2d');tempCanvas.width = max.x - min.x;tempCanvas.height = min.y - max.y;console.log('tempCanvas', tempCanvas.width, tempCanvas.height);// 截取区域ctx.drawImage(canvas,min.x, max.y, tempCanvas.width, tempCanvas.height,0, 0, tempCanvas.width, tempCanvas.height);// 导出图片const img = tempCanvas.toDataURL('image/png');// console.log(img); // 图片链接,在项目中到这一步就可以了// vectorLayer.removeGeometry(rectangle); // 清除矩形startPoint = null;// 下载截图const link = document.createElement('a');link.download = 'map-screenshot.png';link.href = img;link.click();});const items = ["Point","LineString","Polygon","Circle","Ellipse","Rectangle","FreeHandLineString","FreeHandPolygon",].map(function (value) {return {item: value,click: function () {drawTool.setMode(value).enable();},};});const toolbar = new maptalks.control.Toolbar({items: [{item: "Shape",children: items,},{item: "Disable",click: function () {drawTool.disable();},},{item: "Clear",click: function () {layer.clear();},},],}).addTo(map);</script>
</body></html>
http://www.dtcms.com/a/138064.html

相关文章:

  • uniapp自定义底部导航栏,解决下拉时候顶部空白的问题
  • 决策卫生问题:考公考编考研能补救高考选取职业的错误吗
  • JavaScript 对象复制:浅拷贝与深拷贝
  • DBA工作常见问题整理
  • Vue 3 reactive 和 ref 区别及 失去响应性问题
  • Chromium 134 编译指南 macOS篇:获取源代码(四)
  • LeetCode hot 100—括号生成
  • Hyperf (Swoole)的多进程 + 单线程协程、Gin (Go)Go的单进程 + 多 goroutine 解说
  • 深入剖析 ORM:原理、优缺点、场景及多语言框架示例
  • 消除异步的传染性(代数效应)
  • ARINC818-1协议
  • 网易游戏 x Apache Doris:湖仓一体架构演进之路
  • 鸿蒙系统开发中路由使用详解
  • 【并行分布计算】Hadoop伪分布搭建
  • 【并行分布计算】Hadoop单机分布搭建
  • ubuntu docker 创建镜像 报错 dial tcp xxxx read udp xxxx i/o timeout 还有 Forbidden
  • 秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作
  • Redis面试——常用命令
  • 【KWDB 创作者计划】_上位机知识篇---SDK
  • Python入门安装和语法基础
  • Ubuntu多用户VNC远程桌面环境搭建:从零开始的完整指南
  • java 设计模式之代理模式
  • [形象解析] ptmalloc、tcmalloc与jemalloc对比
  • PHP序列化/反序列化漏洞原理
  • 杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其三
  • 告别定时任务!用Dagster监听器实现秒级数据响应自动化
  • [ComfyUI]重磅升级,FLUX.1-dev-ControlNet-Union-Pro-2.0发布,更好用了
  • Java对接Dify API接口完整指南
  • 吴恩达深度学习复盘(19)XGBoost简介|神经网络与决策树
  • openai发布今天发布了o3和o4-mini。