微信小程序 地图map(电子围栏圆形和多边形)

news2024/9/22 7:41:14

正常情况下是没有手机上画电子围栏的,公共平台上我也没找到,所以走了一个歪点子,就是给地图添加点击事件,记录点的位置,在画到电子围栏上就是添加电子围栏了,如果只是显示电子围栏就简单了

一、多边形电子围栏

<view>
  <map id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="13" bindtap="bindtapMap" markers="{{markers}}" polyline="{{polyline}}" polygons="{{polygons}}" show-location style="width: 100%; height: 80vh;">
  </map>
  <button type="primary" bindtap="removePolygons">删除围栏</button>
</view>

 字段说明:

bindtapMap:地图点击方法

creatPolygons:点图围栏绘制方法

markers:显示位置点

polygons:连线位置点


Page({
    data: {
      latitude: 24.463713,
      longitude: 118.082085,
      markers: [],
      polygons: [],
    },

    creatPolygons() {
      //创建多边形围栏
      if (this.data.markers.length < 3){
        return
      }
      let polygons = this.data.polygons;
      let markers = this.data.markers;
      let newArray = [];
      let params = {
        fillColor: "#1791fc66",
        strokeColor: "#FFF",
        strokeWidth: 2,
        zIndex: 3
      }
      for (let j = 0; j < markers.length; j++) {
        let obj = {
          latitude: markers[j].latitude,
          longitude: markers[j].longitude
        };
        newArray.push(obj);
      }
      polygons[0] = {};
      polygons[0].points = newArray;
      newArray = Object.assign(polygons[0], params);
      this.setData({
        "polygons[0]": newArray
      })
    },
    bindtapMap(e) {
      //创建标记点
      let tapPoint = e.detail;
      let markers = this.data.markers
      let newContent = markers.length
      let markerItem = {
        id: newContent,
        latitude: null,
        longitude: null,
        iconPath: '../img/point.png',
        width: '34px',
        height: '34px',
        rotate: 0,
        alpha: 1,
        zIndex: 3
      }
      markerItem.latitude = tapPoint.latitude;
      markerItem.longitude = tapPoint.longitude;
      markers.push(markerItem)
      this.setData({
        markers
      })
      this.creatPolygons()

    },
    removePolygons() {
      //删除围栏和标记
      this.setData({
        markers: [],
        polygons: []
      })
    },
  }

)

二、圆形电子围栏

 

<view>
  <map bindtap="bindtapMap" markers="{{markers}}" id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="13" circles="{{circles}}" style="width: 100%; height: 80vh;">
  </map>
  <button type="primary" bindtap="removePolygons">删除围栏</button>
</view>

字段说明:bindtapMap:标记位置点。这和多边形就不一样了,我只需要两个点,第一个点为圆形的中心,第二个点则为圆形的边

distance:计算第一个点和第一个点的距离(以米为单位,如果要千米就 /1000)

markers:位置点显示

circles:圆形围栏显示

Page({
    data: {
      latitude:39.90923,
      longitude: 116.397428,
      markers: [],
      circles: [],
    },
    removePolygons() {
        //删除围栏和标记
        this.setData({
          markers: [],
          circles: []
        })
    },
    bindtapMap(e) {
      //创建标记点
      let tapPoint = e.detail;
      let markers = this.data.markers
      let newContent = markers.length
      let markerItem = {
        id: newContent,
        latitude: null,
        longitude: null,
        iconPath: '../img/point.png',
        width: '34px',
        height: '34px',
        rotate: 0,
        alpha: 1,
        zIndex: 3
      }
      markerItem.latitude = tapPoint.latitude;
      markerItem.longitude = tapPoint.longitude;
      if (markers.length == 0) {
        markers.push(markerItem)
        this.setData({
          markers
        })
      } else {
        console.log(this.distance(markers[0].latitude,
          markers[0].longitude,
          markerItem.latitude,
          markerItem.longitude))
        this.setData({
          circles: [{
            latitude: markers[0].latitude,
            longitude: markers[0].longitude,
            fillColor: "#7cb5ec88",
            color: '#FF0000DD',
            radius: this.distance(markers[0].latitude,
              markers[0].longitude,
              markerItem.latitude,
              markerItem.longitude),
          }],
        })
      }

    },
    distance(la1, lo1, la2, lo2) {
      var La1 = la1 * Math.PI / 180.0;
      var La2 = la2 * Math.PI / 180.0;
      var La3 = La1 - La2;
      var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
      var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
      s = s * 6378.137;
      s = Math.round(s * 1000);
      return s;
    },
    onLoad(options) {},


  }

)

所遇到的问题:

1.circles内我添加level无效,导致我看不到围栏下面的地图,我也没解决他为啥不好使,所以我就给围栏添加颜色时做了点手脚( fillColor: "#7cb5ec88",color: '#FF0000DD')

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

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

相关文章

kubernetes中的kubectl命令详解

kubectl命令详解 一&#xff1a;陈述式资源管理方法&#xff1a;&#xff08;1&#xff09;简单的基础命令1.查看版本信息2.查看资源对象简写3.查看集群信息4.配置kubectl自动补全5.node节点查看日志 &#xff08;2&#xff09;基本信息查看1.查看 master 节点状态2.查看命名空…

黑马大数据学习笔记4-Hive部署和基本操作

目录 思考规划安装MySQL数据库修改root用户密码配置Hadoop下载解压Hive提供MySQL Driver包配置Hive初始化元数据库启动Hive&#xff08;使用Hadoop用户&#xff09;Hive体验HiveServer2HiveServer2服务启动 Beeline p48、51、52 https://www.bilibili.com/video/BV1WY4y197g7/?…

《合成孔径雷达成像算法与实现》Figure3.9

代码复现如下&#xff1a; clc clear close all% 参数设置 TBP 100; % 时间带宽积 T 7.2e-6; % 脉冲持续时间 t_0 1e-6; % 脉冲回波时延% 参数计算 B TBP/T; …

计网实验第三章:TCP

问题集一 问题一 客户端计算机(源)使用的IP地址和TCP端口号是什么&#xff1f;将文件传输到gaia.cs.umass.edu? 图1 答&#xff1a;如图1中所示&#xff1a;192.168.31.7 &#xff0c;80 问题二 gaia.c.s.umass.edu的IP地址是什么?发送的端口号是什么并接收此连接的TCP段…

VR内容定制 | VR内容中控管理平台可以带来哪些价值?

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中教育领域也不例外。通过VR技术&#xff0c;学生可以身临其境地参与到各种场景中&#xff0c;获得更加直观、生动的学习体验。为了让教师更好地进行VR教学的设计和管理&#xff0c;提高教…

Mac电脑如何把照片以文件格式导出?

在Mac电脑上&#xff0c;我们经常会拍摄、保存和编辑各种照片。有时候&#xff0c;我们可能需要将这些照片以文件形式导出&#xff0c;以便与他人共享、打印或备份。无论您是要将照片发送给朋友、上传到社交媒体&#xff0c;还是保存到外部存储设备&#xff0c;导出照片为文件是…

Wlan——射频和天线基础知识

目录 射频的介绍 射频和Wifi 射频的相关基础概念 射频的传输 信号功率的单位 射频信号传输行为 天线的介绍 天线的分类 天线的基本原理 天线的参数 射频的介绍 射频和Wifi 什么是射频 从射频发射器产生一个变化的电流&#xff08;交流电&#xff09;&#xff0c;通过…

Java后端开发需要学什么课程,能够帮助就业

Java后端开发需要学什么课程&#xff0c;学习内容对于想要在Java就业的同学来说非常重要。以下是一些关键的学习内容&#xff0c;可以帮助他们在Java领域获得就业机会&#xff1a; Java核心知识&#xff1a;掌握Java编程语言的基本语法、面向对象编程、异常处理、集合框架等核心…

[保研/考研机试] KY102 计算表达式 上海交通大学复试上机题 C++实现

描述 对于一个不存在括号的表达式进行计算 输入描述&#xff1a; 存在多组数据&#xff0c;每组数据一行&#xff0c;表达式不存在空格 输出描述&#xff1a; 输出结果 示例1 输入&#xff1a; 6/233*4输出&#xff1a; 18思路&#xff1a; ①设立运算符和运算数两个…

并发——synchronized 关键字

文章目录 1.说一说自己对于 synchronized 关键字的了解2. 说说自己是怎么使用 synchronized 关键字3. 构造方法可以使用 synchronized 关键字修饰么&#xff1f;4. 讲一下 synchronized 关键字的底层原理4.1. synchronized 同步语句块的情况4.2. synchronized 修饰方法的的情况…

多用户跨境电商商品库系统快速搭建(全开源)

搭建一个多用户跨境电商商品库系统需要以下步骤&#xff1a; 1. 确定系统需求&#xff1a;首先&#xff0c;需要明确系统的功能需求&#xff0c;包括商品管理、订单管理、用户管理、支付管理等。根据具体需求确定系统的功能和界面设计。 2. 确定技术栈&#xff1a;选择合适的…

Redis简单学习

Redis是一个基于内存的key-value结构数据库 linux上面安装&#xff1a; Redis存储的是key-value结构的数据&#xff0c;其中key是字符串&#xff0c;value有常见的5中数据类型&#xff1a; 字符串 string哈希 hash列表 list集合 set有序集合 sorted set 字符串常用操作&am…

Jmeter压测实战:Jmeter二次开发之自定义函数

目录 1 前言 2 开发准备 3 自定义函数核心实现 3.1 新建项目 3.2 继承实现AbstractFunction类 3.3 最终项目结构 4 Jmeter加载扩展包 4.1 maven构建配置 4.2 项目打包 4.3 Jmeter加载扩展包 5 自定义函数调用调试 5.1 打开Jmeter函数助手&#xff0c;选择自定义函数…

linux文件I/O之 open() 函数用法

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> typedef unsigned int mode_t ; int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 函数功能 打开或创建一个文件 返回值 成功…

4.2、Flink任务怎样读取文件中的数据

目录 1、前言 2、readTextFile&#xff08;已过时&#xff0c;不推荐使用&#xff09; 3、readFile&#xff08;已过时&#xff0c;不推荐使用&#xff09; 4、fromSource(FileSource) 推荐使用 1、前言 思考: 读取文件时可以设置哪些规则呢&#xff1f; 1. 文件的格式(tx…

上海震坤行工业超市入选胡润百富“中国产业互联网30强”

上海震坤行工业超市入选胡润百富“中国产业互联网30强” &#xff08;2023年6月27日&#xff0c;广州&#xff09;全面提供全球最具潜力创业企业榜单的胡润研究院今日发布《2023胡润中国产业互联网30强》&#xff08;Hurun China IIoT Top 30 2023&#xff09;&#xff0c;榜…

利用Ettercap进行DNS欺骗攻击

一、域名系统&#xff08;DNS&#xff09; 域名系统DNS是Internet上使用的命名系统&#xff0c;用于将系统名称转换为人们易于使用的IP地址。域名系统是基于互联网的前身ARPANET开发的&#xff0c;在ARPANET时代&#xff0c;主机名和对应的IP地址是通过HOST.TXT文件集中管理的…

IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?

KK集团发起了其IPO之路上的第三次冲击。 近日&#xff0c;KK集团更新了招股书&#xff0c;继续推进港交所上市进程&#xff0c;此前两次上市搁置后终于有了新动向。从更新内容来看&#xff0c;KK集团招股书披露了公司截至2023年一季度的最新业绩&#xff0c;交出一份不错的“成…

你怎么看这MyBatis-flex框架 ?(入门篇)

1、简介 在国内目前使用最多的ORM框架就是Mybatis-Plus&#xff0c;也不得不承认&#xff0c;Mybatis-Plus相对于JPA而言&#xff0c;也确实好用一些&#xff08;就个人而言&#xff09;&#xff0c;但是在国外JPA框架还是挺火的&#xff0c;因为JPA是一个完全的ORM框架&#x…

等了10年,工信部的APP备案终于来了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 2005年3月&#xff0c;工信部要求所有境内网站都要进行网站备案、公安备案。 2023年8月&#xff0c;工信部要求所有的APP、小程序进行备案。否则…… 这绝对是一个移动互联网创业分水岭&#xff0…