高德地图JS API AMap.MouseTool绘制

fang在这里插入图片描述

🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻
👀 文章专栏: 高德AMap专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。
感谢支持💕💕💕

关联文章:
高德地图JS API 开发——区划浏览DistrictExplorer
高德地图JS API加载行政区边界AMap.Polygon

目录

    • 高德地图JS API AMap.MouseTool绘制
      • 鼠标工具 AMap.MouseTool
      • 运行示例
      • 实现步骤
        • 1.引入JS API加载地图
        • 2.创建MouseTool工具类
        • 3.通过鼠标进行绘制覆盖物
        • 4.获取通过 AMap.MouseTool 绘制的点、线、面覆盖物的位置/范围/路径
        • 5.鼠标工具距离量测、面积量测、拉框放大
        • 全部代码

高德地图JS API AMap.MouseTool绘制

在前期文章谈到过关于高德矢量图形,用于在地图上绘制线、面等矢量地图要素的类型;接下来介绍鼠标工具 MouseTool 绘制,包括绘制线段、多边形、矩形、圆形,这种功能来DIY区域块、设置为围栏划分。

鼠标工具 AMap.MouseTool

new AMap.MouseTool(map: Map)

AMap.MouseTool 插件主要通过用户在地图图面的鼠标操作,绘制相应的点、线、面覆盖物;或者进行图面的距离测量、面积量测、拉框放大、拉框缩小等。。其下的成员主体函数:marker(opts)、circle(opts)、rectangle(opts)、polyline(opts)、polygon(opts)、measureArea(opts)、rule(opts)、rectZoomIn(opts)、rectZoomOut(opts)、及close(ifClear)

成员函数描述参数
marker([opts])开启鼠标画点标注模式。鼠标在地图上单击绘制点标注,标注样式参考MarkerOptions设置opts (MarkerOptions) 可选,参考MarkerOptions设置
circle([opts])开启鼠标画圆模式。鼠标在地图上拖动绘制相应的圆形。圆形样式参考CircleOptions设置opts (CircleOptions) 可选,参考CircleOptions设置
rectangle([opts])开启鼠标画矩形模式。鼠标在地图上拉框即可绘制相应的矩形。矩形样式参考PolygonOptions设置opts (PolygonOptions) 可选,参考PolygonOptions设置
polyline([opts])开启鼠标画折线模式。鼠标在地图上点击绘制折线,鼠标左键双击或右键单击结束绘制,折线样式参考PolylineOptions设置opts (PolylineOptions) 可选,参考PolylineOptions设置
polygon([opts])开启鼠标画多边形模式。鼠标在地图上单击开始绘制多边形,鼠标左键双击或右键单击结束当前多边形的绘制,多边形样式参考PolygonOptions设置opts (PolygonOptions) 可选,参考PolygonOptions设置
measureArea([opts])开启面积量测模式。鼠标在地图上单击绘制量测区域,鼠标左键双击或右键单击结束当前量测操作,并显示本次量测结果。量测面样式参考PolygonOptions设置opts (PolygonOptions) 可选,参考PolygonOptions设置
rule([opts])开启距离量测模式。鼠标在地图上单击绘制量测节点,并计算显示两两节点之间的距离,鼠标左键双击或右键单击结束当前量测操作。量测线样式参考PolylineOptions设置 注:不能同时使用rule方法和RangTool插件进行距离量测opts (PolylineOptions) 可选,参考PolylineOptions设置
rectZoomIn([opts])开启鼠标拉框放大模式。鼠标可在地图上拉框放大地图。矩形框样式参考PolygonOptions设置opts (PolygonOptions) 可选,参考PolygonOptions设置
rectZoomOut([opts])开启鼠标拉框缩小模式。鼠标可在地图上拉框缩小地图。矩形框样式参考PolygonOptions设置opts (PolygonOptions) 可选,参考PolygonOptions设置
close([ifClear])关闭当前鼠标操作。参数arg设为true时,鼠标操作关闭的同时清除地图上绘制的所有覆盖物对象;设为false时,保留所绘制的覆盖物对象。默认为falseifClear (boolean) 可选,是否清除地图上的覆盖物

运行示例

InsCode审核中

实现步骤

1.引入JS API加载地图

加载JS API注意AMap.MouseTool需要引入使用 plugins: ["AMap.MouseTool"]

引入方式看自己项目选择,前期文章可供参考👉 「JS API急救包」

  import AMapLoader from '@amap/amap-jsapi-loader';const initializeMap = async () => {await AMapLoader.load({key: "", // 请替换为您自己的高德地图API Keyversion: "2.0",plugins: ["AMap.MouseTool"] // 引入AMap.MouseTool 插件}).then((AMap) => {map = new AMap.Map('container', {zoom: 14});});};
2.创建MouseTool工具类
      //在地图中添加MouseTool插件mouseTool = new AMap.MouseTool(map);//添加绘制触发事件draw()mouseTool.on('draw', (e) => {overlays.value.push(e.obj);});
3.通过鼠标进行绘制覆盖物
mouseTool.marker({// 在这里配置样式
});

如果想通过鼠标点击,在图面添加自定义样式 Marker 点,只需要在 marker 方法中添加点样式 MarkerOptions。具体配置参考 「点覆盖物」。
线,面的添加方式同上。只要将 marker 方法替换成相应的线 mousetool.polyline(); 或者 面 mousetool.polygon(); 方法即可。

mouseTool.polyline(opts);
mouseTool.polygon(opts);
mouseTool.rectangle(opts);
// 更多...
4.获取通过 AMap.MouseTool 绘制的点、线、面覆盖物的位置/范围/路径

使用鼠标工具绘制的点、折线、多边形、圆形、矩形等覆盖物,都可以通过多边形覆盖物自身的方法,获取到位置/范围/路径。此处以多边形为例,阐述获取相应信息的方式:

    //在地图中添加MouseTool插件var mouseTool = new AMap.MouseTool(map);//用鼠标工具画多边形var drawPolygon = mouseTool.polygon(); //添加事件AMap.event.addListener( mouseTool,'draw',function(e){console.log(e.obj.getPath());//获取路径/范围});
5.鼠标工具距离量测、面积量测、拉框放大

鼠标工具除可以绘制多种覆盖物以外,还可以进行距离量测、面积量测、拉框放大、拉框缩小等操作。

以下以距离量测模式为例介绍。鼠标在地图上单击绘制量测节点,并计算显示两两节点之间的距离,鼠标左键双击或右键单击结束当前量测操作。距离测量方式:

   //在地图中添加MouseTool插件var mouseTool = new AMap.MouseTool(map);//测量mouseTool .rule(); 

在这里插入图片描述

全部代码
<!-- Vue 3 Code -->
<template><div><div ref="container" id="container"></div><div class="info">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div><div class="input-card"><div class="input-item"><input type="radio" name="func" value="marker" v-model="selectedTool"><span class="input-text">画点</span><input type="radio" name="func" value="polyline" v-model="selectedTool"><span class="input-text">画折线</span><input type="radio" name="func" value="polygon" v-model="selectedTool"><span class="input-text" style="width:5rem;">画多边形</span></div><div class="input-item"><input type="radio" name="func" value="rectangle" v-model="selectedTool"><span class="input-text">画矩形</span><input type="radio" name="func" value="circle" v-model="selectedTool"><span class="input-text">画圆</span><input type="radio" name="func" value="distance" v-model="selectedTool"><span class="input-text">测距</span></div><div class="input-item"><input id="clear" type="button" class="btn" value="清除" @click="clearOverlays" /><input id="close" type="button" class="btn" value="关闭绘图" @click="closeDrawing" /></div></div></div></template><script setup>import { ref, onMounted, onBeforeUnmount, watch } from 'vue';import AMapLoader from '@amap/amap-jsapi-loader';const containerRef = ref(null);const selectedTool = ref('marker');const overlays = ref([]);let map = null;let mouseTool = null;const initializeMap = async () => {await AMapLoader.load({key: "22b379529dd2879095130ee6b2774d36", // 请替换为您自己的高德地图API Keyversion: "2.0",plugins: ["AMap.MouseTool"]}).then((AMap) => {map = new AMap.Map('container', {zoom: 14});mouseTool = new AMap.MouseTool(map);mouseTool.on('draw', (e) => {overlays.value.push(e.obj);});});};const draw = (type) => {switch (type) {case 'marker':mouseTool.marker();break;case 'polyline':mouseTool.polyline({ strokeColor: '#ff33ff', //轮廓线颜色strokeOpacity: 1, //轮廓线透明度strokeWeight: 3, //轮廓线宽度strokeStyle: "solid", //线样式还支持 'dashed'});break;case 'polygon':mouseTool.polygon({ strokeColor: '#3366FF',strokeWeight: 3, });break;case 'rectangle':mouseTool.rectangle({ fillColor: '#87CEFA', // 填充颜色fillOpacity: 0.2, // 填充透明度strokeColor: '#1E90FF',strokeWeight: 3, });break;case 'circle':mouseTool.circle({ fillColor: '#ff3333', strokeColor: '#DC143C',strokeWeight: 3, });break;case 'distance':mouseTool.rule();break;}};const clearOverlays = () => {map.remove(overlays.value);overlays.value = [];};const closeDrawing = () => {mouseTool.close(true);selectedTool.value = '';};watch(selectedTool, (newVal) => {if (newVal) {draw(newVal);}});onMounted(() => {initializeMap();});onBeforeUnmount(() => {if (map) {map.destroy();}});</script><style scoped>// import "../assets/mousetool.css"; 示例原样式https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css#container {height: 100vh;width: 100vw;
}</style>

在这里插入图片描述
如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀
在这里插入图片描述

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

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

相关文章

本地搭建我的世界服务器(JAVA)简单记录

网上参考教程挺多的&#xff0c;踩了不少坑&#xff0c;简单记录一下&#xff0c;我做的是一个私人服务器&#xff0c;就是和朋友3、4个人玩。 笨蛋 MC 开服教程 先放一个比较系统和完整的教程&#xff0c;萌新可用&#xff0c;这个教程很详细&#xff0c;我只是记录一下自己的…

【QT】定时器使用

文章目录 关于 Qt 定时器使用的注意细节总结实例-检查工具使用周期时间是否合理UI设计头文件 remind.h源文件 remind.cpp实现效果 关于 Qt 定时器使用的注意细节总结 一、创建与初始化 使用 QTimer 类来创建定时器。可以在构造函数中指定父对象&#xff0c;确保定时器在正确的…

自动化测试常用函数

目录 一、元素的定位 1、cssSelector 2、xpath &#xff08;1&#xff09;xpath 语法 1、获取HTML页面所有的节点 2、获取HTML页面指定的节点 3、获取一个节点中的直接子节点 4、获取一个节点的父节点 5、实现节点属性的匹配 6、使用指定索引的方式获取对应的节点内容…

【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信

目录 1、模块化语法 1.1 模块化基本认知 1.2 默认导出和导入 1.2.1 在ets下新建tools目录 1.2.2 在tools下新建moduls.ets文件 1.2.3 index.ets 1.3 按需导出和导入 1.4 全部导入 2、自定义组件 -基础 2.1 自定义组件 - 基本使用 2.2 自定义组件 -通用样式 2.2.1 et…

大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍

文章目录 阿里云Flink MySQL连接器介绍 一、特色功能 二、​​​​​​​语法结构 三、​​​​​​​​​​​​​​WITH参数 阿里云Flink MySQL连接器介绍 阿里云提供了MySQL连接器&#xff0c;其作为源表时&#xff0c;扮演的就是flink cdc的角色。 一、特色功能 MySQ…

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后&#xff0c;按照左边10张图中的代码&#xff0c;复制粘贴熟悉语法 效果如下 csv数据…

基于JAVA+SpringBoot+Vue的学生干部管理系统

基于JAVASpringBootVue的学生干部管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

【AI视频】Runway:Gen-2 运镜详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;Camera Control&#xff08;运镜&#xff09;&#x1f4af;Camera Control功能测试Horizonta&#xff08;左右平移&#xff09;Vertical&#xff08;上下平移&#xff0…

UNION嵌套STRUCT的两种类型

1. STRUCT里面的总长度大于UNION中的最大长度 在UNION类型中&#xff0c;嵌套如STRUCT类型&#xff0c;其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候&#xff0c;会如何处理呢&#xff0c;看下面示例 程序源码 #include "stdafx.h"typedef unsigned…

103.WEB渗透测试-信息收集-FOFA语法(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;102.WEB渗透测试-信息收集-FOFA语法&#xff08;2&#xff09; FOFA使用实例 组件框架 …

DAY20信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

2.自动化-网络空间-AsamF 1.去GitHub上下载项目之后使用CMD打开 2.输入命令AsamF_windows_amd64.exe -v生成配置文件 3.AsamF会在~/.config/asamf/目录下生成config.json文件 C:\Users\Acer\.config\asamf 5.根据文档输入命令去查询所需信息&#xff08;已经没有用了&#x…

LabVIEW多语言支持优化

遇到的LabVIEW多语言支持问题&#xff0c;特别是德文显示乱码以及系统区域设置导致的异常&#xff0c;可能是由编码问题或区域设置不匹配引起的。以下是一些可能的原因及解决方案&#xff1a; 问题原因&#xff1a; 编码问题&#xff1a;LabVIEW内部使用UTF-8编码&#xff0c;但…

react的事件绑定

文章目录 基本示例使用箭头函数事件对象阻止默认行为绑定事件处理函数的上下文 在 React 中&#xff0c;事件绑定主要通过 JSX 属性来实现。事件处理函数被传递给相应的事件属性&#xff0c;例如 onClick、onChange 等。这些属性会被绑定到 HTML 元素上&#xff0c;并在事件发生…

大白话解读末日期权是什么意思?末日期权与黑天鹅!

今天带你了解大白话解读末日期权是什么意思&#xff1f;末日期权与黑天鹅&#xff01;末日期权与黑天鹅事件的关系主要体现在风险和波动性管理上&#xff0c;交易者需要谨慎对待这两者的互动。 末日期权和期权黑天鹅事件之间的关系主要体现在风险管理和市场波动性上。 末日期…

【SA8155P】AIS Camera相关内容的简单介绍

高通车载相机模块(AIS,Automotive lmage System)是专门针对车载系统特性而设计的一套车载视觉架构,可用于AVM、RVC、DMS等常见车载视频应用开发。车载Camera系统的图像大部分是给自动驾驶等使用,更多考虑的是远距离传输、多摄像头图像处理等场景。 本文仅对AIS Camera相关…

2024考研数学真题解析-数二:

第一类间断点&#xff1a;可去间断点&#xff0c;跳跃间断点。 幂指函数x的取值范围是x>0。 接着分母不能为0推出x1&#xff0c;x2是间断点&#xff0c;由幂指函数x>0可知&#xff0c;x0也是间断点。 先求x0处的极限&#xff0c;这里没有必要求0左右两边的极限&#xff0…

百元头戴式耳机都有哪些?五大精品独家推荐!

在当今市场中&#xff0c;耳机已经成为我们生活中不可或缺的电子设备之一。而对于追求性价比的朋友来说&#xff0c;如何在百元价位内挑选到一款音质出色、舒适耐用的头戴式耳机&#xff0c;无疑是一大难题。百元头戴式耳机都有哪些&#xff1f;为了帮助大家在琳琅满目的产品中…

Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式)

前言: 发个之前的库存… Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式) 本次验证的是CentOS_7_Minimal-2009桌面模式来部署Oracle 11g r2,大家可根据自身环境及学习来了解。 环境:下载地址都给你们超链好了 1、Linux系统镜像包: 1.1 CentOS-7-x86_…

嵌入式AI---如何用C++实现YOLO的NMS(非极大值抑制)算法

文章目录 前言一、为什么需要NMS算法&#xff1f;二、什么是NMS算法&#xff1f;三、如何使用C编写一个NMS算法1、预测框定义2、滤除无效框 总结 前言 YOLO系列的目标检测算法在边缘部署方面展现出了强大的性能和广泛的应用潜力。大部分业务场景是利用PyTorch在服务器端完成检…

【网络安全】-ssrf服务器请求伪造攻击-burp

SSRF攻击服务器请求伪造攻击 CSRF攻击跨站请求伪造攻击也称客户端请求伪造攻击 两种攻击最主要的区别是一个在服务器&#xff0c;一个在客户端。 文章目录 前言 什么是SSRF攻击? 1.分类&#xff1a; 针对服务器的 SSRF 攻击&#xff1a; 针对后端系统的SSRF攻击&#xff1a; …