Mapbox封装图形绘制工具 线,圆,polygon,删除,点 mapbox-gl-draw-circle mapbox-gl-draw

news2024/11/17 17:54:24

使用插件,安装

npm install mapbox-gl-draw-circle   //绘制圆
npm install @mapbox/mapbox-gl-draw   //绘制点线面删除

相关API地址:https://github.com/mohong/mapbox-gl-draw-circle
https://github.com/mapbox/mapbox-gl-draw/blob/main/docs/API.md

vue案例,封装的组件

<!--
 * @Description: 地图绘制
-->

<template>
  <div class="draw_map"></div>
</template>

<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
//import {  } from '@/config/http/url';
import {
  CircleMode,
  DragCircleMode,
  DirectMode,
  SimpleSelectMode,
} from "mapbox-gl-draw-circle";
import MapBoxDraw from "@mapbox/mapbox-gl-draw";
import "@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css";
export default {
  name: "",
  //import引入的组件需要注入到对象中才能使用
  components: {},
  props: {
    tools: {
      type: Object,
      default: () => {
        return {
          point: true,
          line_string: true,
          polygon: true,
          trash: true,
          circle: true,
        };
      },
    },
  },
  data() {
    //这里存放数据
    return {};
  },
  directives: {},
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    /**
     * @description: 添加绘制圆控件
     * @param {*} draw  new MapBoxDraw
     * @return {*}
     * @author: 邢康
     */
    addCircleControl(draw) {
      // mapboxgl-ctrl
      let parent = document.getElementsByClassName("mapboxgl-ctrl")[0];
      let brother = document.getElementsByClassName("mapbox-gl-draw_trash")[0];
      let newChild = document.createElement("button");
      newChild.title = "Circle";
      newChild.className = "mapbox-gl-draw_ctrl-draw-btn mapbox-gl-draw_circle";
      newChild.innerHTML = "⚪";
      newChild.style.color = "black";
      newChild.addEventListener("click", () => {
        draw.changeMode("draw_circle", {
          initialRadiusInKm: Math.floor(100 / window.myMap.getZoom()),//根据地图缩放层级计算默认半径
        });
      });
      parent.insertBefore(newChild, brother);
    },
  },
  //生命周期 - 创建完成(可以访问当前this实例)
  created() {},
  //生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
    const draw = new MapBoxDraw({
      displayControlsDefault: false,
      userProperties: true,
      controls: this.tools,
      modes: {
        ...MapBoxDraw.modes,
        draw_circle: CircleMode,
        drag_circle: DragCircleMode,
        direct_select: DirectMode,
        simple_select: SimpleSelectMode,
      },
    });
    let time = setInterval(() => {
      let map = window.myMap; //mapbox对象,根据需要更改
      if (map) {
        clearInterval(time);
        map.addControl(draw);
        map.on("draw.create", (e) => {
          console.log(e);

          this.$emit("drawCreate", e);
        });
        map.on("draw.update", (e) => {
          console.log(e);

          this.$emit("drawUpdate", e);
        });
        this.tools.circle && this.addCircleControl(draw);
      }
    }, 1000);
  },
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style lang="less" scoped>
//@import ''; 引入公共css类
::v-deep .mapboxgl-ctrl-top-right {
  right: 15px !important;
}
</style>

使用方式,通过tools控制需要哪些绘制控件


    <draw-map
      :tools="{
        // point: true,
        // line_string: true,
        polygon: true,
        trash: true,
        // circle: true,
      }"
    ></draw-map>

相关问题处理

安装mapbox-gl-draw-circle,引入后运行编译报错 can’t resolve ‘fs’…
{path:false}…此类错误

在vue.config.js中配置configureWebpack>resolve>alias添加path:false,
resolve中添加fallback: { fs: false },

 config.resolve = {
      alias: {
        "@": path.join(__dirname, "./src"),
        "@public": path.join(__dirname, "./public"),

        vue: "vue/dist/vue.esm.js",
        path: false,
      },
      fallback: { fs: false },
    };

最终效果:在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包

四、设置打包和加载路径 五、打开Hosting服务 六、打包 打包完成后路径在Assets同级目录下的ServerData 但是目前没有资源文件对比 修改上面设置后再次打包 里面多了哈希和JSON文件&#xff0c;这俩个就是用于资源对比

dotnet4.0编译问题

因为最近在写cobaltstrike的execute-assembly内存加载的c#项目 用visual studio2022编译&#xff0c;最低net只能用6.0版本的&#xff0c;并且execute-assembly不支持 我想使用4.x版本进行编译&#xff0c;因为visual studio不支持&#xff0c;那么使用命令行进行编译 因为要用…

简单了解Redis(初识阶段)

1.认识Redis 对于Redis有一个很重要的点就是&#xff0c;它存储数据是在内存中存储的。 但是对于单机程序&#xff0c;直接通过变量存储数据的方式是更优的&#xff0c;在分布式系统下 Redis才能发挥威力 因为进程是有隔离性的&#xff0c;Redis可以基于网络&#xff0c;把进…

solidwork怎么隐藏实体再

在实际生产生活中&#xff0c;由于一些零件重叠或覆盖导致我们无法正确装配 我们就需要隐藏实体来看内部结构 假如不需要这个白色的大腿 先双击点他&#xff0c;然后右键 此时即可隐藏 同时右边零件会变白 想重新显示这样操作就可以了

Linux 常用命令(待更新)

1、pwd命令 2、cd命令 3、ls命令 4、locate命令 5、clear命令 6、cat命令 7、head命令 8、tail命令 9、grep命令 10、chmod命令 11、cp命令 12、mv命令 13、mkdir命令 14、rm命令 15、文件压缩和有关归档的命令 16、文件系统的命令 17、与系统管理相关的命令 …

2024 Snap 新款ar眼镜介绍

2024 snap 新款ar眼镜介绍 2024 Snap 新款ar眼镜介绍 助力快速掌握数据集的信息和使用方式。

【中台设计】数字中台,大数据中台解决方案,中台建设指南(资料Word分享)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集&#xff0c;结构化、半结构化、非结构化的数据采集&#xff0c;数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

煤矿井下钻场目标检测数据集 5类 voc格式

煤矿井下钻场目标检测数据集 本数据集包含了来自不同钻场和环境背景条件下的70948张图片&#xff0c;涵盖了夹持器、钻机卡盘、煤矿工人、矿井安全帽和钻杆等五类目标&#xff0c;并提供了PASCAL VOC格式的标注文件。 摘要 煤矿井下钻场打钻是解决瓦斯灾害、水害、隐蔽地质灾害…

点云与Open3D

点云数据介绍 点云与三维图像的关系&#xff1a;三维图像是一种特殊的信息表达形式&#xff0c;其特征是表达的空间中三个维度的数据&#xff0c;表现形式包括&#xff1a; 深度图&#xff08;以灰度表达物体与相机的距离&#xff09;&#xff0c;几何模型&#xff08;由CAD软…

Solidity语言:重点学习Solidity编程语言,这是EVM上最常用的智能合约语言。

Solidity是一种面向合约的编程语言&#xff0c;用于在以太坊虚拟机&#xff08;EVM&#xff09;上编写智能合约。它是Solidity开发者在以太坊平台上创建智能合约的主要选择之一。 学习Solidity的重点包括以下几方面&#xff1a; 语法和数据类型&#xff1a;学习Solidity的基本…

工业边缘计算网关和普通网关的区别-天拓四方

随着物联网&#xff08;IoT&#xff09;和工业4.0的快速发展&#xff0c;网关作为连接不同网络和设备的关键设备&#xff0c;其角色和功能日益凸显。在工业环境中&#xff0c;工业边缘计算网关和普通网关虽然都扮演着重要的角色&#xff0c;但它们在功能、应用场景和性能上存在…

算法:69.x的平方根

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;二分算法&#xff09; 当然你可以使用暴力查找&#xff0c;但是二分算法的时间复杂度更好。 我们先用暴力查找找点灵感 x &#xff1a;1 2 3 4 5 6 7 8 x2&#xff1a;1 4 9 16 25 36 49 64 我们的目的是找到一个x…

【Java特性】多态详解——对象类型转换与 instanceof 关键字的运用

多态是指不同类的对象在调用同一个方法时所呈现出的多种不同行为。通常来说&#xff0c;在一个类中定义的属性和方法被其他类继承或重写后&#xff0c;当把子类对象直接赋值给父类引用变量时&#xff0c;相同引用类型的变量调用同一个方法所呈现出的多种不同形态。多态不仅解决…

My_string 运算符重载,My_stack

思维导图 将My_string类中的所有能重载的运算符全部进行重载 、[] 、>、<、、>、<、! 、&#xff08;可以加等一个字符串&#xff0c;也可以加等一个字符&#xff09;、输入输出(<< 、 >>) My_string my_string.h #ifndef MY_STRING_H #define MY_…

【论文】FunAudioLLM:一个旨在增强人类与大型语言模型(LLMs)之间自然语音交互的模型家族

研究背景 1.研究问题&#xff1a;这篇文章要解决的问题是如何增强人类与大型语言模型&#xff08;LLMs&#xff09;之间的自然语音交互。具体来说&#xff0c;研究集中在语音识别、情感识别和音频事件检测&#xff08;多语言&#xff09;以及语音生成&#xff08;多语言、零样…

云栖3天,云原生+ AI 多场联动,新产品、新体验、新探索

云栖3天&#xff0c;云原生 AI 20场主题分享&#xff0c;三展互动&#xff0c;为开发者带来全新视听盛宴 2024.9.19-9.21 云栖大会 即将上演“云原生AI”的全球盛会 展现最新的云计算技术发展与 AI技术融合之下的 “新探索” 一起来云栖小镇 见证3天的云原生AI 前沿探索…

828华为云征文 | 在华为云上通过Docker容器部署Elasticsearch并进行性能评测

目录 前言 1. 华为云X实例介绍及优势 1.1 柔性算力 1.2 vCPU和内存的灵活配比 1.3 成本效益与性能 2. 安装并运行 Docker 2.1 修改仓库配置文件 2.2 安装 Docker 2.3 启动 Docker 3. 使用Docker部署Elasticsearch 3.1 拉取Elasticsearch镜像 3.2 启动Elasticsearch…

SpringBoot整合ELK实现日志监控(保姆级教程)

新建SpringBoot项目 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

[单master节点k8s部署]24.构建EFK日志收集平台(三)

Kibana Kibana是elasticsearch的可视化界面。 首先创建kibana的服务&#xff0c;yaml文件如下。k8s里的服务分为四种&#xff0c;clusterIP为仅仅为pod分配k8s集群内部的一个虚拟ip&#xff0c;用于集群内的pod通信&#xff0c;而不对外暴露。elasticsearch的服务就是cluster…

Redis 优化

目录 优雅的 key 删除 Bigkey 恰当的数据类型 批处理优化 Pipeline 集群下的批处理 服务端优化 持久化配置 慢查询 命令以及安全配置 内存安全和配置 内存缓冲区配置 集群最佳实践 集群带宽问题 集群还是主从 优雅的 key 删除 Bigkey Bigkey 内存占用较多&…