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

网站建设与管理实施方案企业建设网站怎么做账

网站建设与管理实施方案,企业建设网站怎么做账,dw如何制作网页,备案网站制作以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库,可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。 实现步骤 初始化地图 在 HTML 文件中引入 Mapbox GL JS 库&…

以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库,可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。


实现步骤

  1. 初始化地图

    • 在 HTML 文件中引入 Mapbox GL JS 库,并设置一个容器来显示地图。
    • 创建一个 mapboxgl.Map 实例,配置地图样式、中心点和缩放级别。
  2. 监听鼠标事件

    • 使用 map.on 方法监听 mousedown(鼠标按下)、mousemove(鼠标移动)和 mouseup(鼠标松开)事件。
    • mousedown 时记录矩形的起始点。
    • mousemove 时根据鼠标位置实时更新矩形。
    • mouseup 时结束绘制并固定矩形。
  3. 绘制矩形

    • 使用 GeoJSON 数据格式表示矩形。
    • 通过 map.addSourcemap.addLayer 将矩形添加到地图上。
    • 在鼠标移动时动态更新 GeoJSON 数据以显示矩形的当前形状。
  4. 结束绘制

    • 在绘制完成后移除不必要的事件监听器,避免重复触发。

详细代码

以下是完整的 HTML 和 JavaScript 代码示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Mapbox GL 绘制矩形</title><script src="https://api.mapbox.com/mapbox-gl-js/v2.10.0/mapbox-gl.js"></script><link href="https://api.mapbox.com/mapbox-gl-js/v2.10.0/mapbox-gl.css" rel="stylesheet"><style>body { margin: 0; padding: 0; }#map { position: absolute; top: 0; bottom: 0; width: 100%; }</style>
</head>
<body><div id="map"></div><script>// 设置 Mapbox 访问令牌mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN'; // 请替换为你的 Mapbox 访问令牌// 初始化地图const map = new mapboxgl.Map({container: 'map', // 地图容器 IDstyle: 'mapbox://styles/mapbox/streets-v11', // 地图样式center: [-74.5, 40], // 初始中心点(经度,纬度)zoom: 9 // 初始缩放级别});let startPoint; // 矩形起始点// 开始绘制:监听鼠标按下事件function startDrawing(e) {startPoint = e.lngLat; // 记录鼠标按下时的经纬度map.on('mousemove', drawRectangle); // 开始监听鼠标移动map.on('mouseup', stopDrawing); // 开始监听鼠标松开}// 绘制矩形:监听鼠标移动事件function drawRectangle(e) {const endPoint = e.lngLat; // 获取鼠标当前位置// 计算矩形的四个顶点坐标const coordinates = [[startPoint.lng, startPoint.lat], // 左上角[endPoint.lng, startPoint.lat],   // 右上角[endPoint.lng, endPoint.lat],     // 右下角[startPoint.lng, endPoint.lat],   // 左下角[startPoint.lng, startPoint.lat]  // 回到起点闭合];// 创建矩形的 GeoJSON 数据const rectangleGeoJSON = {type: 'Feature',geometry: {type: 'Polygon',coordinates: [coordinates]}};// 如果数据源已存在,则更新;否则创建新数据源和图层if (map.getSource('rectangle')) {map.getSource('rectangle').setData(rectangleGeoJSON);} else {map.addSource('rectangle', {type: 'geojson',data: rectangleGeoJSON});map.addLayer({id: 'rectangle-layer',type: 'fill',source: 'rectangle',paint: {'fill-color': '#088', // 填充颜色'fill-opacity': 0.5   // 透明度}});}}// 结束绘制:监听鼠标松开事件function stopDrawing() {map.off('mousemove', drawRectangle); // 移除鼠标移动监听map.off('mouseup', stopDrawing);     // 移除鼠标松开监听// 可以在此保存矩形数据或执行其他操作}// 绑定鼠标按下事件,开始绘制流程map.on('mousedown', startDrawing);</script>
</body>
</html>

代码讲解

1. 初始化地图
  • 引入 Mapbox GL JS:通过 <script><link> 标签引入 Mapbox GL JS 的 JavaScript 和 CSS 文件。
  • 设置访问令牌:将 mapboxgl.accessToken 设置为你的 Mapbox 访问令牌(需自行申请)。
  • 创建地图实例:使用 mapboxgl.Map 配置地图,指定容器 ID(map)、地图样式(streets-v11)、中心点和缩放级别。
2. 监听鼠标事件
  • 鼠标按下 (mousedown)
    • 通过 e.lngLat 获取鼠标按下时的经纬度,存储在 startPoint 中。
    • 绑定 mousemovemouseup 事件,开始绘制流程。
  • 鼠标移动 (mousemove)
    • 调用 drawRectangle 函数,实时更新矩形形状。
  • 鼠标松开 (mouseup)
    • 调用 stopDrawing 函数,移除事件监听器,结束绘制。
3. 绘制矩形
  • 计算坐标:根据 startPoint 和当前鼠标位置 endPoint,生成矩形的四个顶点坐标,形成闭合的多边形。
  • 创建 GeoJSON:将坐标封装为 GeoJSON 格式的 Polygon 类型。
  • 更新地图
    • 如果地图上已有 rectangle 数据源,则通过 setData 更新数据。
    • 如果没有,则通过 addSource 添加数据源,并通过 addLayer 创建一个填充图层来显示矩形。
  • 样式设置:矩形填充颜色为 #088(青色),透明度为 0.5
4. 结束绘制
  • stopDrawing 函数中,使用 map.off 移除 mousemovemouseup 的事件监听器,确保绘制过程不会重复触发。
  • 你可以选择在此处保存矩形数据(例如存储到数组中)或添加其他功能。

注意事项

  • 访问令牌:确保将 'YOUR_MAPBOX_ACCESS_TOKEN' 替换为你的实际 Mapbox 访问令牌,否则地图无法加载。
  • 单一矩形:当前代码只支持绘制一个矩形,绘制完成后会覆盖之前的矩形。如需支持多个矩形,可以为每个矩形生成唯一的 ID 并创建独立图层。
  • 扩展功能:你可以添加按钮或逻辑来重置地图状态,或允许用户删除已绘制的矩形。

通过以上代码可以在 Mapbox GL JS 地图上实现鼠标绘制矩形的功能。这一功能适用于区域选择、地图标注等场景,具有很强的实用性。

http://www.dtcms.com/a/597575.html

相关文章:

  • 网站制作与网站建设实际报告文案发布平台
  • 开源项目合并新分支和本地修改指南
  • GJOI 11.5 题解
  • 网站建设是什么语言wan网站建设
  • 个人网站域名怎么起企业官方网站建设的流程
  • CTFHub Web进阶-Json Web Token通关5:修改签名算法
  • 华为OD机试 双机位A卷 - 上班之路 (JAVA Python C++ JS GO)
  • CEVA-DSP开发初识(一)
  • 峰均比降低技术(CFR)
  • 如何删除网站备案号房地产政策
  • 盐城网盐城网站建设站建设wordpress视频解析接口
  • 【CPKCOR-RA8D1】Home Assistant 物联网 ADC 电压温度计
  • STM32外设学习--DMA直接存储器读取(AD扫描程序,DMA搬运)--学习笔记。
  • 贵州网站开发制作公司开发公司各部门职责
  • FreeRTOS 学习:(十八)FreeRTOS 中断管理
  • 做外贸网站 怎么收钱池州哪里做网站
  • 介绍一下 机器人坐标转换的 RT 矩阵
  • 网站备案换公司吗盐山县网站建设
  • 为智能制造护航:SASE如何重塑制造业网络安全与连接
  • 品牌授权网站什么网站可以做软件有哪些东西
  • h5网站系统企业网站制作排名
  • ZeroNews 场景案例 | 结合小皮面板实现公网web服务发布
  • 本地的赣州网站建设电商网站支付接口
  • C# 记录类型(record)全面解析:从概念到最佳实践
  • 广西响应式网站制作怎么修改自己网站内容
  • 万网网站建设教程免费做网站的网站
  • Meta Omnilingual ASR:一个支持超1600种语言的语音识别系统解析
  • 9、prometheus-PromQL-3-偏移量修改器
  • 【题解】洛谷 P2471 [SCOI2007] 降雨量 [线段树 + 逻辑]
  • [8]. SpringAI Alibaba Tool Calling