高德地图设置电子围栏

news2024/9/30 19:40:57

高德地图设置电子围栏

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

需求

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

效果图

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

代码实现

前端实现区域框选:

//引入高德地图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是围栏角坐标集合,可以传给后端判断是否在坐标围栏内
}
        

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

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

相关文章

Python语言高级实战-内置函数super()的使用之类的多继承(附源码和实现效果)

实现功能 super()函数的调用顺序是按照方法解析顺序&#xff08;Method Resolution Order, MRO&#xff09;来确定的。MRO 是一个确定继承顺序的算法&#xff0c;它使用 C3 线性化算法来避免潜在的方法冲突。Python会根据继承顺序自动计算 MRO&#xff0c;我们只需要使用 supe…

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…

响应式招标投标网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;29165 模板编码&#xff1a;UTF8 模板分类&#xff1a;博客、文章、资讯、其他 适合行业&#xff1a;招标类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&a…

Python基础入门(5)----Python中的变量和表达式:变量的定义、赋值和数据类型转换

文章目录 Python中的变量和表达式:变量的定义、赋值和数据类型转换变量的定义变量的赋值数据类型转换注意事项表达式总结Python中的变量和表达式:变量的定义、赋值和数据类型转换 Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Python编程中,变量和表…

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时&#xff0c;可以手动删除每个文件中的某些字段&#xff0c;当文件较多时&#xff0c;就需要使用arcpy或者model进行处理。

字节测试开发岗面试竟如此简单...

前言 因为读者里有不少刚入门测试的同学&#xff0c;这两天抽空整理了一份字节测试开发岗的面试题答案&#xff0c;说实话这个题目真挺简单的&#xff0c;如果你面大厂碰到此类面试题&#xff0c;也算是运气很好啦。大家也可以先自测一下&#xff0c;看看自己能不能答上来。 如…

图片文件过大怎么压缩?五种压缩方法大全

图片文件过大怎么压缩&#xff1f;不知道大家有没有遇到过这样的尴尬情况&#xff0c;当我们将一些图片上传到某个网站的时候&#xff0c;被提示图片大小操作了网站的限制而被禁止上传&#xff0c;我相信很多人都遇到过吧&#xff0c;其实这是网站的一张防御措施&#xff0c;防…

aosp定制android系统

目录 AOSP 准备工作(配置) 确定机型和版本 初始化 git安装 curl安装 同步源码 环境变量 创建aosp目录 指定同步版本 解下来安装编译需要的依赖 编译aosp源码 刷入系统 AOSP 全称 Android Open Source Project 是指Android开源项目&#xff0c;它是由Google主导的…

【Java】BMI身体质量指数计算工具

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍BMI身体质量指数计算工具的Java实现。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

服装和纺织品在欧盟和英国售卖需要做哪些认证?REACH认证、EN14682认证

近期&#xff0c;不少亚马逊卖家在欧洲和应该售卖纺织品和服装都遇到了安全问题&#xff0c;下架的理由都是不符合产品安全的要求&#xff0c;下架邮件有以下几种&#xff1a; ①标签不合规 ②不符合安全标准 那么&#xff0c;纺织品出口到欧盟和英国&#xff0c;具体有哪些要…

智能井盖传感器功能,万宾科技产品介绍

在国家治理方面&#xff0c;对社会的治理是一个重要的领域&#xff0c;一定要在推进社会治理现代化过程中提高市政府的管理和工作能力&#xff0c;推动社会拥有稳定有序的发展。在管理过程中对全市井盖进行统一化管理&#xff0c;可能是市政府比较头疼的难题&#xff0c;如果想…

新开普智慧校园系统RCE漏洞 [附POC]

文章目录 新开普智慧校园系统RCE漏洞 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 新开普智慧校园系统RCE漏洞 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#x…

某集团营销、制造多公司业财一体核算整体流程图(ODOO15/16)

某集团旗下有销售公司、加工制造厂、原料生产厂等多家公司&#xff0c;此类型公司从客户订单到完成交货&#xff0c;业务环节相对复杂&#xff0c;业务单据多&#xff0c;出纳银行收付款流水多、对象多&#xff0c;难以正确核销&#xff0c;跟单部难以全面了解订单进度&#xf…

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知&#xff0c;魔方财务现在官方售价299&#xff0c;那么接下来就是带来开心版&#xff0c;详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布&#xff01;

大数据之LibrA数据库系统告警处理(ALM-12029 license文件失效)

告警解释 系统在安装集群后和每天零点检查当前系统中的license文件是否失效&#xff08;即当前集群中导入的license文件的节点数是否超限&#xff0c;license文件是否过期&#xff09;。如果license文件失效&#xff0c;产生该告警。 当license文件有效时&#xff0c;告警恢复…

Java使用FTP连接到NAS读取文件信息,并将文件信息变成单向树形结构设置到对象中

检测NAS是否启用的FTP连接模式 如果这里不启用会出现下面错误提示&#xff1a; MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenS 使用依赖 <dependency><groupId>commons-net</groupId><artifactId>comm…

【高德地图API】JS高德地图实现点标连线,高德地图实现点跟点连线,高德地图实现连线

前言 高德地图API参考&#xff1a;https://lbs.amap.com/demo/javascript-api/example/marker/custom-icon 实现各个点标的经纬度连线&#xff0c;点击点标可查看内容&#xff08;自定义的&#xff09; 效果 实现 案例实现&#xff0c;复制粘贴&#xff0c;将安全密钥和key替…

个性化联邦学习-综述

介绍阅读的三篇个性化联邦学习的经典综述文章 Three Approaches for Personalization with Applications to Federated Learning 论文地址 文章的主要内容 介绍了用户聚类&#xff0c;数据插值&#xff0c;模型插值三种个性化联邦学习的方法。 用户聚类&#xff1a; 目的&a…

工作四年,我学会了用 Idea本地调试线上服务器代码

文章目录 工作四年&#xff0c;我学会了用 Idea本地调试线上服务器代码&#x1f4c6; 一.那些辛酸的过往&#x1f4d5;二.远程debug原理远程调试分类主动连接调试&#xff1a;被动连接调试&#xff1a; &#x1f44b;三.操作步骤3.1.准备一个简单springboot程序 例如helloworld…