高德地图设置电子围栏

高德地图设置电子围栏

        • 需求
        • 效果图
        • 代码实现

需求

给地图上人员锚点设置围栏区域,如果在此区域内则是在线状态,不在此区域内则是离线状态

效果图

在这里插入图片描述
在这里插入图片描述
双击可编辑或清除当前围栏
在这里插入图片描述

代码实现

前端实现区域框选:

//引入高德地图sdk
 "@amap/amap-jsapi-loader": "^1.0.1"
//html 展示操作按钮
<el-button type="primary" class="sub-btn" @click="handleStart">开始建围栏</el-button> //点击开始建立围栏后,围栏操作按钮才可见


<div class="map-paint-box2" v-show="clickBox">
      <el-button plain @click="startWrite">开始绘制</el-button>
      <el-button plain @click="clearWrite">清除</el-button>
      <el-button plain @click="finishWrite">完成绘制</el-button>
</div>
//初始化地图:
function initMap() {
    AMapLoader.load({
        key:"",   // 申请好的Web端开发者Key,首次调用 load 时必填
        version:"2.0", // 指定要加载的 JSAPI 的版本,缺省时默认1.4.15
        AMapUI: {
            version: '1.1',
            plugins:['control/BasicControl']
        }      // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    }).then((AMap)=>{
        map.value = new AMap.Map("container",{  //设置地图容器id
            resizeEnable: true, //是否监控地图容器尺寸变化
            zoom: 16, //初始化地图层级、
            center: [104.560920999, 31.4560470000]
        });
    }).catch(e=>{
        console.log(e);
    })
}
//初始化围栏信息
function handleStart() {
	allPoly = []
	//先从后端获取已经建立的围栏,展示在地图上存到currentOrgWeilan
	clickBox.value = true //展示操作按钮
	AMapLoader.load({
      key:"",  // 申请好的Web端开发者Key,首次调用 load 时必填
      version:"2.0",
      plugins:['AMap.PolygonEditor','AMap.Polygon'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    }).then((AMap)=>{
        polyEditor = new AMap.PolygonEditor(map.value);
        if (currentOrgWeilan.length > 0) {
            // 复现该组织下的围栏数据
            for (let one of  currentOrgWeilan ) {
                let path = []
                let arr = one.regionScope.split(',')
                for (var i of arr) {
                    let itemLatLng = []
                    let oneArr = i.split('_')
                    itemLatLng.push(Number(oneArr[0]), Number(oneArr[1]))
                    path.push(itemLatLng)
                }
                //围栏数据处理 并展示
                var polygon = new AMap.Polygon({
                    path: path
                })
                allPoly.push(polygon)
            }
            map.value.add(allPoly)
            map.value.setFitView(allPoly);
            polyEditor.addAdsorbPolygons(allPoly)
            for (let one of allPoly) {
           		// 双击某个围栏可以进行编辑
                one.on('dblclick', () => {
                    polyOverlays = []
                    currentPoly = one
                    polyEditor.setTarget(one);
                    polyOverlays.push(one)
                    polyEditor.open();
                })
            }
        }
       // 直接在地图建立新的围栏
        polyEditor.on('add', function (data:any) {
            var polygon = data.target;
            polyEditor.addAdsorbPolygons(polygon);
            polyOverlays = []
            polyOverlays.push(polygon)
            allPoly.push(polygon)
            currentPoly = polygon // currentPoly 存放当前双击围栏,不然点其他操作时总是会操作到最后创建的围栏
            polygon.on('dblclick', () => {
                polyOverlays = []
                currentPoly = polygon
                polyEditor.setTarget(polygon);
                polyOverlays.push(polygon)
                polyEditor.open();
            })
        })
        
    }).catch(e=>{
        console.log(e);
    })
	
}
function startWrite() {
    polyEditor.close();
    polyEditor.setTarget();
    polyEditor.open();
    polyPointArr = []
}
function clearWrite() {
    allPoly.some((one,index)=> {
        if (one==currentPoly) {
            allPoly.splice(index,1)
            return true
        }
    })
    map.value.remove(polyOverlays)
    polyEditor.close()
}

async function finishWrite() {
    polyEditor.close()
    for (var item of allPoly) {
        let polyAr = item.getPath()
        let str = '',allStrArr = [], allStr=''
        for (var one of polyAr) {
            str = one.lng+'_'+one.lat
            allStrArr.push(str)
        }
        allStr=allStrArr.join(',');
        polyPointArr.push(allStr)
    }
  //polyPointArr是围栏角坐标集合,可以传给后端判断是否在坐标围栏内
}
        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

visual studio Python 配置QGIS(qgis)教程

visual studio Python 配置QGIS&#xff08;qgis&#xff09;教程 这个教程全网独一份啊&#xff0c;博主是自己摸索出来的。 visual studio Python 配置QGIS&#xff08;qgis&#xff09;环境一共分为两部&#xff1a; 第一步安装QGIS&#xff1a; 下载链接如下 https://www…

音视频报警可视对讲15.6寸管理机

音视频报警可视对讲15.6寸管理机 一、管理机技术指标&#xff1a; 1、15.6寸原装京东方工业液晶触摸屏&#xff0c;分辨率1920 (H) x 1080 (V)&#xff1b; 2、1000M/100M自适应双网口&#xff1b; 4、按键设置&#xff1a;报警/呼叫按键&#xff0c;通话/挂机按键&#xff…

C 语言左移位操作在kernel驱动子系统中的特殊用途

文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…

【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

后期混音效果全套插件Waves 14 Complete mac中文版新增功能

Waves 14 Complete for Mac是一款后期混音效果全套插件&#xff0c;Waves音频插件,内置混响&#xff0c;压缩&#xff0c;降噪和EQ等要素到建模的模拟硬件&#xff0c;环绕声和后期制作工具&#xff0c;包含全套音频效果器&#xff0c;是可以让你使用所有功能。Waves 14 Comple…

医院陪诊小程序源码 医院陪诊陪护系统源码

医院陪诊小程序源码 医院陪诊陪护系统源码 陪诊系统小程序&#xff1a;提高陪诊效率&#xff0c;改善医疗服务体验 近年来&#xff0c;随着互联网技术的不断发展&#xff0c;我们的生活中出现了越来越多的智能设备和智能应用&#xff0c;这些智能应用不仅极大方便了我们的生活…

【C++干货铺】初识模板

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 泛型编程 函数模板 函数模板格式 函数模板原理 函数模板实例化 模板参数的匹配原则 类模板 定义格式 类模板的实例化 泛型编程 什么是泛型&#xff1f; …

C 数据类型

C 数据类型 在 C 语言中&#xff0c;数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间&#xff0c;以及如何解释存储的位模式。 C 中的类型可分为以下几种&#xff1a; 序号类型与描述1基本数据类型 它们是算术类型&#x…

渗透实战靶机2wp

0x00 简介 1、测试环境 目标IP&#xff1a;10.xxxx 测试IP&#xff1a;192.168.139.128 测试环境&#xff1a;win10、kali等 测试时间&#xff1a;2021.7.22-2021.7.22 测试人员&#xff1a;ruanruan 2、测试过程 本次实战主要通过对收集到的端口、目录等信息进行持续整…

Web服务器的搭建

网站需求&#xff1a; 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/data网站访问教…

ZYNQ_project:led

本次实验完成&#xff1a;led流水间隔0.5s 闪烁间隔0.25s。 名词解释&#xff1a; analysis分析&#xff1a;对源文件进行全面的语法检查。 synthesis综合&#xff1a;综合的过程是由 FPGA 综合工具箱 HDL 原理图或其他形式源文件进行分析&#xff0c;进而推演出由 FPGA 芯…

企业数字化转型与供应链效率-基准回归复刻(2007-2022年)

参照张树山&#xff08;2023&#xff09;的做法&#xff0c;本团队对来自统计与决策《企业数字化转型与供应链效率》一文中的基准回归部分进行复刻。文章实证检验企业数字化转型对供应链效率的影响。用年报词频衡量上市公司数字化转型程度&#xff0c;以库存周转天数来衡量供应…

Tomcat运行日志乱码问题/项目用tomcat启动时窗口日志乱码

文章目录 一、问题描述&#xff1a;二、产生原因三、解决方法四、遗留问题/后续问题 一、问题描述&#xff1a; 项目在idea中运行时日志是正常的&#xff0c;用Tomcat启动时发现一大堆看不懂的文字&#xff0c;如 二、产生原因 产生乱码的根本原因就是编码和解码不一致&…

044_第三代软件开发-保存PDF

第三代软件开发-保存PDF 文章目录 第三代软件开发-保存PDF项目介绍保存PDF头文件源文件使用 关键字&#xff1a; Qt、 Qml、 pdf、 painter、 打印 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff…

汽车电子中的深力科推荐一款汽车用功率MOSFET NVTFS6H888NLTAG N沟道

NVTFS6H888NLTAG MOSFET是符合AEC-Q101标准的汽车用功率MOSFET&#xff0c;采用WDFN-8封装&#xff0c;实现紧凑设计。具有低QG和电容&#xff08;最大限度地降低驱动器损耗&#xff09;和低 RDS(on)&#xff08;降低传导损耗&#xff09;。还提供可湿性侧翼选项&#xff0c;用…

安卓系统手机便签app使用哪一款?

在现代快节奏的生活中&#xff0c;我们经常会遇到各种繁忙的事务和容易遗忘的备忘事项。为避免大家遗忘重要的事情&#xff0c;大家可以在常用的手机上安装记录备忘事项的工具&#xff0c;为了帮助安卓用户高效地记录和管理这些信息&#xff0c;今天我将向大家推荐一款功能强大…

宠物领养系统jsp+servlet+mysql

设计不同用户的操作权限、注册和登录方法。 管理员可以在管理员管理、用户管理、宠物管理、评论管理、团队活动管理、志愿者的申请等等模块中进行查询、添加、删除、修改。 管理员可以在领养管理中通过领养时间查询所有宠物被领养的信息&#xff0c;修改是否同意领养宠物&#…

alpha融合详解(alpha compositing)

alpha融合简介 alpha融合&#xff08;alpha compositing&#xff09;是图像处理中常用技术&#xff0c;常见的公式如下&#xff1a; C O α C A ( 1 − α ) C B (1) C_O \alpha C_A (1-\alpha)C_B \tag{1} CO​αCA​(1−α)CB​(1) 其中 C A C_A CA​&#xff0c; C B C…

Android打造一个高性能无限层级显示的树形控件(Android树形控件)

Android使用ListView实现一个高性能无限层级显示的树形控件&#xff1a; 最近公司的Android项目里有一个地方需要选择某公司的所有部门&#xff0c;因为手机屏幕有限所以并不能像网页那样显示树状结构&#xff0c;但是如果只是用列表依次显示所有的部门又会让用户很难找到想要…

Centos7部署Python3环境

一、安装Python3 ###查看是否安装Python3 Centos 7 默认安装了python 2.7.5. 因为一些命令要用它比如yum 它使用的是python2.7.5 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置 Python指向的是Python2.7 安装依赖 y…