vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(二)

2023-11-02

五、MassMarks海量点标记

let mass;
//此处我定义了6种海量点图标,此处url我用的是项目中本地引入的图片,也可以填在线url链接,props.infoList是项目后端返回的所有点的信息数组,其中每个点对象有个style字段,取值是0,1,2,3,4,5对应我定义的6种图标,接口这个字段返回哪个值就取哪个图标显示。这个style可以是单个对象也可以是数组,此处我展示的是数组的用法。
style = [
          {
            url: personOffline,
            anchor: new AMap.Pixel(14, 15), //图标显示位置偏移量
            size: new AMap.Size(26, 30), //图标的尺寸
            zIndex: 5 //点展示优先级,默认为使用样式的索引值
          },
          {
            url: personOnline,
            anchor: new AMap.Pixel(14, 15),
            size: new AMap.Size(20, 30),
            zIndex: 4
          },
          {
            url: carOffline,
            anchor: new AMap.Pixel(18, 20),
            size: new AMap.Size(36, 36),
            zIndex: 3
          },
          {
            url: carOnline,
            anchor: new AMap.Pixel(18, 20),
            size: new AMap.Size(36, 36),
            zIndex: 2
          },
          {
            url: deviceOffline,
            anchor: new AMap.Pixel(18, 20),
            size: new AMap.Size(36, 36),
            zIndex: 1
          },
          {
            url: deviceOnline,
            anchor: new AMap.Pixel(18, 20),
            size: new AMap.Size(36, 36),
            zIndex: 0
          }
        ];

mass = new AMap.MassMarks(props.infoList, {
      opacity: 0.8,
      zIndex: 2,
      cursor: "pointer",
      style: style
    });
    mass.setMap(map);
    // 监听海量点点击事件
    mass.on("click", function (e) {
      //使用热力图插件实现点击某个海量点出现高亮效果,详细代码见 五、HeatMap热力图
      renderHeatmap(e.data);
    });

效果如图:

六、HeatMap热力图

let heatmap;
//点击某个设备,在地图中跳转到指定位置并高亮图标
function renderHeatmap(ele) {
  //判断如果存在热力图,隐藏之前的高亮点
  if (heatmap) {
    const originData = heatmap.getDataSet();
    // 针对需要清除高亮点的数据点,将权值设置为0
    originData.data[0].count === 0;
    // 更新数据集
    heatmap.setDataSet({
      data: originData,
      max: 100
    });
    // 展示更新后的数据集
    heatmap.show();
  }
  heatmap = new AMap.HeatMap(map);
  // 设置热力图的数据
  heatmap.setDataSet({
    data: [{ lng: ele.lnglat[0], lat: ele.lnglat[1], count: 62 }],//count为高量程度
    max: 100
  });
  openInfoWindows(ele);//打开信息窗体,详见 七、InfoWindow信息窗体
  map.setCenter(ele.lnglat);//跳转到指定位置
  const zoom = map.getZoom();//判断当前地图层级,如果地图层级小于15就把地图层级放大到15
  if (zoom < 15) {
    map.setZoom(15);
  }
}

 效果如图:

六、 InfoWindow信息窗体

(此处我使用的是高德地图默认窗体样式,还有其他样式窗体可去官方文档查阅)

let InfoWindow;
//构建信息窗体中显示的内容
  if (infoWindow) {
    infoWindow.close();
  }
  const infos = `
  <div class='content-window-card'>
    <p class="title-type">${
      infoData.personOrCar === "0"
        ? "人员-离线"
        : infoData.personOrCar === "1"
        ? "人员-在线"
        : infoData.personOrCar === "2"
        ? "车辆-离线"
        : infoData.personOrCar === "3"
        ? "车辆-在线"
        : infoData.personOrCar === "4"
        ? "设备-离线"
        : "设备-在线"
    }</p>
    <div class='info-windows'>
      <div class='left-info'>
        <span>序号:${infoData.number}</span>
        <span>姓名:${infoData.fullName}</span>
        <span>速度:${infoData.speed}km/h</span>
        <span>定位方式:${infoData.locationType}</span>
        <span>状态:${infoData.state}</span>
      </div>
      <div class='right-info'>
        <span>sim卡号:${infoData.sim}</span>
        <span>定位时间:${infoData.gpsTime}</span>
        <span>更新时间:${dayjs(Number(infoData.updTime)).format(
          "YYYY-MM-DD HH:mm:ss"
        )}</span>
        <span>设备型号:${infoData.macName}</span>
      </div>
    </div>
  </div>
`;
  infoWindow = new AMap.InfoWindow({
    content: infos //使用默认信息窗体框样式,显示信息内容
  });
  infoWindow.open(map, infoData.lnglat);

结合五、六、七效果如图:

 

圆形围栏、多边形围栏、轨迹线等请看上篇:

vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(一)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(二) 的相关文章

随机推荐

  • e4a锁屏接收服务器信息,Arduino+ESP8266接收服务器信息

    上一篇文章 Arduino ESP8266上传数据到服务器 我们介绍了Arduino如何将数据上传到服务器上 与之相对应的是如何终端读取服务器的数据 在这一篇文章中我们将进行详细的讲解 为了便于说明 我们先演示一下如何 手动 的上传 读取数
  • Linux系统管理:虚拟机ESXi安装

    目录 一 理论 1 VMware Workstation 2 VMware vSphere Client 3 ESXi 二 实验 1 ESXi 7安装 一 理论 1 VMware Workstation 它是一款专业的虚拟机软件 可以在一台
  • Qt 命令行编译,VC命令行编译,调用nsis

    QT bat脚本 rd q s dist mkdir dist qmake exe helloworld pro spec win32 g CONFIG qtquickcompiler o dist cd dist mingw32 make
  • make[1]: *** Waiting for unfinished jobs....

    安装node js环境时候 make报错 报错信息 make 1 Waiting for unfinished jobs rm 490f1fcf42b2afac71d1c00fb593c736d4a65552 intermediate ma
  • Python执行JS代码的三种方式

    1 使用 js2py 基本操作 import js2py 执行单行js语句 js2py eval js console log abcd gt gt gt abcd 执行js函数 add js2py eval js function add
  • 基于session和token的身份认证方案

    一 基于session的身份认证方案 1 方案图示 2 比较通用的鉴权流程实现如下 在整个流程中有两个拦截器 第一个拦截器 AuthInteceptor是为了每一次的请求的时候都先去session中取user对象 如果session中有 就
  • 组合排列——回溯法的实践

    一 模板 对于回溯问题 可以给一个模板 result def backtracking 参数 if 终止条件 result add 路径 return for 选择 本层集合中元素 树中节点孩子的数量就是集合的大小 处理节点 backtra
  • 微信小程序 组件间关系

    完整微信小程序 Java后端 技术贴目录清单页面 必看 定义和使用组件间关系 有时需要实现这样的组件
  • Linux 压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    Linux 压缩 解压文件的 4 种方式 tar gzip gunzip zip unzip 7z命令使用方法 文章目录 Linux 压缩 解压文件的 4 种方式 tar gzip gunzip zip unzip 7z命令使用方法 1 t
  • JS 读写文件

    用js不能直接读取文件 但是可以利用浏览器提供的activex来实现读写文件的方法 只在IE下测试过 其他浏览器下的activex对象不太清楚 可以网上搜一下 具体读写文件的代码如下 function createAndReadFile v
  • UE4 - 海洋材质水下效果的修改

    屏幕前的污渍MASK修改位置如下 水下扭曲效果 强度修改位置如下 这里改0 1是无效的 只有0和1的区别 如果要调整波纹强度 需要到材质里修改 500的强度改为200 或者100 就很弱了 镜头光晕增加的地方
  • ThreadLocal与InheritableThreadLocal的实现原理

    文章目录 ThreadLocal介绍 使用方式 set 问题 InheritableThreadLocal介绍 源码 方案 ThreadLocal介绍 threadLocal的特点就是与线程绑定 一般通过这种隐式传参的方式来传递上下文 比如
  • vue实现高德地图点聚合功能

    效果截图展示 高德地图点聚合功能 1 创建地图 new AMap Map 示例 this map new AMap Map container resizeEnable true 是否监控地图容器尺寸变化 center 105 34 初始化
  • 终于来了!耗时268天,7大模块、2983页58万字,Android开发核心知识笔记!对标阿里P7!

    版权声明 本文为博主原创文章 未经博主允许不得转载 https www jianshu com u 3348b92f77a4 前言 转眼就快到 金九银十 又是个面试求职的黄金期 近来许多网友都在求一份完整 系统的学习资料和最新的大厂面试真题
  • Objective-C中的@dynamic

    Objective C中的 dynamic 一 dynamic与 synthesize的区别 property有两个对应的词 一个是 synthesize 一个是 dynamic 如果 synthesize和 dynamic都没写 那么默认
  • 【Linux】线程池

    文章目录 1 线程池概念 2 线程池的优点 3 线程池的应用场景 4 线程池的实现 5 STL和智能指针和线程安全 5 1其他常见锁 5 2读写锁 1 线程池概念 线程池是一种线程使用模式 线程过多会带来调度开销 进而影响缓存局部性和整体性
  • Linux UDP编程流程

    文章目录 UDP编程流程 UDP协议无连接的特点 UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接 不可靠的 数据报服务 服务器端和客户端没有什么本质上的区别 编程流程如下 socket 用来创建套接字 使用 udp 协议时
  • 友盟埋点详解

    数据埋点让产品或运营等相关人员能按照具体的需求 定制性地统计较为复杂的用户数据 例如想要追踪用户的行为 观察页面相关点击数据 关键路径转化率 分析某个事件活动效果时 就需要事先进行数据埋点 关于友盟的初始化配置不是此文的重点 网上一搜一堆的
  • Pycharm配置——解释器(interpreter)

    今天打开pycharm运行一段代码 结果遇到了这个问题 以上应该是没有配置解释器的问题 那我是怎么解决这个问题的呢 1 打开文件 File 2 打开设置 Setting 3 打开新project的默认设置 4点击project Interp
  • vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(二)

    五 MassMarks海量点标记 let mass 此处我定义了6种海量点图标 此处url我用的是项目中本地引入的图片 也可以填在线url链接 props infoList是项目后端返回的所有点的信息数组 其中每个点对象有个style字段