vue3 高德地图标注(飞线,呼吸点)效果

news2024/11/25 19:27:32

在这里插入图片描述

装下这两个 npm 忘了具体命令了,百度一下就行
“loca”: “^1.0.1”,
“@amap/amap-jsapi-loader”: “^1.0.1”,

<template>
  <div id="map" style="width: 100%;height: 100%;"></div>
</template>

<script setup>
import AMapLoader from '@amap/amap-jsapi-loader';
import {onMounted, ref, nextTick} from "vue";

// const { Loca } = window;

const x1 = ref(
    {
       "type": "FeatureCollection",
       "features": [
         {
           "type": "Feature",
           "properties": {
             "type": 2,
             "ratio": '事件中?石家庄',
             "lineWidthRatio": 0
           },
           "geometry": {
             "type": "Point",
             "coordinates": [114.521531,38.048311]
           }
         }
       ]
    }
)
const x2 = ref(
    {
       "type": "FeatureCollection",
       "features": [
         {
           "type": "Feature",
           "properties": {
             "type": 2,
             "ratio": '不会吧?',
             "lineWidthRatio": 0
           },
           "geometry": {
             "type": "LineString",
             "coordinates": [
               [ // 起点
                 120.1752885,
                 35.9508765
               ],
               [ // 终点
                 114.521531,38.048311
               ]
             ]
           }
         }
       ]
    }
)


const initMap = () => {
  // AMapLoader.reset()

  AMapLoader.load({
    key:"ab15e08b0", // 申请好的Web端开发者Key,首次调用 load 时必填

    /*
    * 刚开始没有引入下面代码时,会报错: Loca is not defined
    *  Loca: {
            version: '2.0.0' // Loca 版本,缺省 1.3.2
        },
        而且 JSAPI的version(版本)要和Loca的version(版本)一致才可以,否则也会报错
        不懂的可以去看官方文档: https://lbs.amap.com/api/loca-v2/intro
    * */

    version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    Loca: {
      version: '2.0.0' // Loca 版本,缺省 1.3.2
    },
    plugins:[], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
  }).then((AMap) => {
    const { Loca } = window;
    const map1 = new AMap.Map("map", {
      resizeEnable: true, // 是否监控地图容器尺寸变化
      viewMode: '3D',
      pitch: 48,// 地图俯仰角度,有效范围 0 度- 83 度
      center:[104.780269, 34.955403], // 地图中心点
      zoom:5, // 地图显示的缩放级别
      mapStyle:"amap://styles/grey", // 设置地图的显示样式
    });

    // Container: Loca 的核心控制类,可以控制光源、视角变换、图层渲染等。
    const loca = new Loca.Container({ // 创建一个容器
      map: map1, // 传入地图实例 还可以这样写: map: map (ES6语法)
    });

    // 呼吸点
    // ScatterLayer: 带有动画效果的图层类型,用于展示散点数据,支持动画效果,如呼吸点、闪烁点等。大地面上的点,可展示三种类型:颜色圆、图标、动画图标
    const scatter = new Loca.ScatterLayer({ // 创建一个散点图层
      loca, // 传入容器实例 (相当于把散点图层添加到地图上)
      zIndex: 10, // 图层层级
      opacity: 0.6, // 图层透明度
      visible: true, // 图层是否可见
      zooms: [2, 22], // 图层显示的缩放级别范围
    });

    /*
    * geojson 格式的数据源,一个数据源可以给多个图层同时提供数据。一个geojson数据源可以同时拥有点、线、面的数据类型,每个图层绘制的时候会自动获取 合适的数据类型进行渲染
    * */
    // 地点坐标---------------
    const pointGeo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
      // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/pulselink-china-city-point.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
      data:  x1.value
    });
    scatter.setSource(pointGeo); // 给上面创建的散点图层设置数据源
    scatter.setStyle({ // 设置样式
      unit: 'meter', // 设置单位为米
      size: [100000, 100000], // 设置大小范围
      borderWidth: 0, // 设置边框宽度
      texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png', // 设置纹理
      duration: 2000, // 设置动画时长
      animate: true, // 设置动画
    });
    loca.add(scatter); // 将散点图层(scatter)添加到容器中

    // 弧线
    // PulseLinkLayer: 连接飞线图层,可以支持弧度,宽度,过渡色等能力。 并且还支持脉冲动画,可以表达数据的朝向
    const pulseLink = new Loca.PulseLinkLayer({ // 创建一个弧线图层
      // loca,
      zIndex: 10, // 设置图层的层级
      opacity: 1, // 设置图层的透明度
      visible: true, // 设置图层是否可见
      zooms: [2, 22], // 设置图层可见的缩放级别范围
      depth: true, // 设置是否开启深度检测
    });

    // GeoJSONSource: 图层的数据源,可以是本地数据,也可以是远程数据,数据格式必须是 geojson 格式
    // 线数据---------------
    const geo = new Loca.GeoJSONSource({ // 创建一个 GeoJSON 对象
      // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/data-line-out.json', // 数据源的链接地址,一般是接口地址,返回的数据必须是 geojson 格式
      data:  x2.value
    });
    pulseLink.setSource(geo); // 给上面的弧线图层设置数据源
    pulseLink.setStyle({ // 设置样式
      unit: 'meter', // 设置单位为米
      dash: [40000, 0, 40000, 0], // 设置虚线样式
      lineWidth: () => { // 设置线宽
        return [20000, 1000]; // 设置线宽范围
      },
      height: (index, feat) => { // 设置高度
        return feat.distance / 3 + 10; // 设置高度范围
      },
      altitude: 1000, // 设置高度
      smoothSteps: 30, // 设置平滑度
      speed: (index, prop) => { // 设置速度
        return 1000 + Math.random() * 200000; // 设置速度范围
      },
      flowLength: 100000, // 设置流动长度
      lineColors: (index, feat) => { // 设置线颜色
        return ['rgb(255,228,105)', 'rgb(255,164,105)', 'rgba(1, 34, 249,1)']; // 设置线颜色范围
      },
      maxHeightScale: 0.3, // 弧顶位置比例
      headColor: 'rgba(255, 255, 0, 1)', // 设置头部颜色
      trailColor: 'rgba(255, 255,0,0)', // 设置尾部颜色
    });
    loca.add(pulseLink); // 将图层添加到容器中
    loca.animate.start(); // 开始动画
    // 点击事件处理
    const clickInfo = new AMap.Marker({ // 点标记
      anchor: 'bottom-center', // 设置点标记锚点,可选值:'top-left','top-center','top-right'等详细请看官方文档: https://lbs.amap.com/api/jsapi-v2/documentation#marker
      position: [116.396923, 39.918203, 0], // 点标记在地图上显示的位置
    });
    clickInfo.setMap(map1); // 将点标记添加到地图上
    clickInfo.hide(); // 隐藏点标记
    map1.on("click", function (e) {
      const feat = pulseLink.queryFeature(e.pixel.toArray());

      const feat2 = scatter.queryFeature(e.pixel.toArray());
      console.log('!!!!!!', feat2)
      if(feat2){ // 点击了呼吸点
        console.log('点击了')
      }

      if (feat) { // 点击了 线
        clickInfo.show();
        const props = feat.properties;
        clickInfo.setPosition(feat.coordinates[1]);
        clickInfo.setContent(
            `<div style="text-align: center; height: 20px; width: 150px; color:#fff; font-size: 14px;">
              ${feat.properties.ratio}
            </div>`
        );
      } else {
        clickInfo.hide();
      }
    });

    /*
      以下为:
      样式调试工具,仅用于开发阶段方便调试样式
      可以将可视化图层添加到调试工具中使用
      请勿在生产环境中使用
    * */

  });
}


const companylData = ref([])
const listData = ref([])



onMounted(async () => {
  nextTick( async () => {
    await initMap();
  })
})

</script>

<style scoped>
:deep(.arco-btn.arco-btn-size-medium){
  height: 31px !important;
}
</style>

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

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

相关文章

linux 下 verilog 简明开发环境附简单实例

author: hjjdebug date: 2024年 10月 12日 星期六 10:34:13 CST descripton: linux 下 verilog 简明开发环境附简单实例 甲: 安装软件 1. sudo apt install iverilog 该包verilog 源代码的编译器iverilog&#xff0c;其输出是可执行的仿真文件格式vvp格式 它可以检查源代码中…

ubuntu20.4环境下gcc-aarch64交叉编译器的安装

交叉编译器&#xff08;Linux环境&#xff09;arm gcc 8.3一共有5个版本&#xff0c;常用的有4个版本&#xff08;另外一个为大端linux版本&#xff09;&#xff0c;分别是32bit裸机版本&#xff08;arm-eabi&#xff09;、64bit裸机版本&#xff08;aarch64-elf&#xff09;、…

4. 单例模式线程安全问题--是否加锁

单例模式线程安全问题--是否加锁 是否加锁问题指什么&#xff1f;解决多线程并发来带的问题继承MonoBehaviour的单例模式不继承MonoBehaviour的单例模式 总结 是否加锁问题指什么&#xff1f; 如果程序当中存在多线程&#xff0c;我们需要考虑当多个线程同时访问同一个内存空间…

【Java】面向UDP接口的网络编程

【Java】面向UDP接口的网络编程 一. 基本通信模型二. APIDatagramSocketDatagramPacket 三. 回显服务器/客户端示例服务器客户端总结 一. 基本通信模型 UDP协议是面向数据报的&#xff0c;因此此处要构建数据报(Datagram)在进行发送。 二. API DatagramSocket DatagramSocke…

Ubuntu 24.04 在 BPI-F3 上通过 SD 卡安装并从 NVME 运行

github 代码&#xff1a; https://github.com/rcman/BPI-F3 Ubuntu 24.04 现在正在我的 BPI-F3 上运行。很快会为 YouTube 制作一个视频。 这应该适用于任何版本的 Linux&#xff0c;仅在 Ubuntu 24.04 上测试过 入门 下载 Bianbu映像并使用您最喜欢的工具将其映像到微型 SD 卡…

进程 vs 线程:你需要知道的关键区别

“大树根深&#xff0c;才能迎风而立。” 进程&#xff1a;计算机中正在执行的程序的实例&#xff0c;它是操作系统进行资源分配的基本单位。 通过写特殊代码&#xff0c;把多个 CPU 核心都能利用起来&#xff0c;这样的代码就称为“并发编程”。 虽然多进程能够解决问题&…

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…

CUDA(C)磁态蒙特卡洛和传输矩阵多GPU并行计算分析

&#x1f3af;要点 使用英伟达GPU、大都会和并行回火算法模拟蒙特卡洛。使用兰佐斯算法计算传输矩阵特征值。使用 Suzuki-Trotter 公式归一化量子无序系统。算法模型特征&#xff1a;多CUDA线程&#xff0c;多GPU和多任务式并行计算。 &#x1f341;磁态分析角度 Python和MA…

BUUCTF-[2019红帽杯]easyRE(Reverse逆向)

第一步 查壳 如图&#xff0c;无壳&#xff0c;ELF文件 第二步 IDA 64位IDA&#xff0c;无法直定位到主函数F5&#xff0c;所以使用&#xff0c;查找关键字符串定位主函数大法ShiftF12 发现这些关键字符串&#xff0c;双击上图蓝色字符串&#xff0c; 然后交叉引用CtrlX跟踪 …

硬件-示波器-巧用触发功能捕捉不连续的信号波形

文章目录 一&#xff1a;使用示波器的信号触发功能二&#xff1a;介绍示波器触发模式界面2.1 触发模式的AUTO档2.2 触发模式的Normal档&#xff08;普通档&#xff09;2.3 触发模式的single档&#xff08;单次触发档&#xff09; 三&#xff1a;在多通道的情况下&#xff0c;选…

电鳗带来灵感,防潮电源诞生,全打印技术的魅力

大家好&#xff01;今天来了解一项受电鳗启发的防潮完全可打印电源的研究——《A moisture-enabled fully printable power source inspired by electric eels》发表于《PNAS》。随着可穿戴电子设备的发展&#xff0c;对安全、一次性且具成本效益的电源需求大增。传统电池存在不…

react native 与 react.js 的区别

React.js ReactJS是一个 JavaScript 库&#xff0c;支持前端 Web 和在服务器上运行&#xff0c;用于构建用户界面和 Web 应用程序。 它主要重点是Web 开发&#xff0c;遵循可重用组件的概念。 React 的虚拟 DOM 比传统的完全刷新模型更快&#xff0c;因为虚拟 DOM 只刷新页面的…

透过《当音乐停止之后》,理解2008年次贷危机:债务、流动性与资本的无声博弈

金融市场就像是整个经济体的循环系统&#xff0c;现代经济体依赖各种授信机制输送营养到整个系统&#xff0c;维持经济的正常运转。书中揭示了2008年次贷危机的背景&#xff0c;以及量化宽松&#xff08;QE&#xff09;政策的作用。通过作者的讲述&#xff0c;我们真正了解2008…

前端继承:原理、实现方式与应用场景

目录 一、定义 二、语法和实现方式 1.原型链继承 2.构造函数继承 3.组合继承 4.ES6类继承 三、使用方式 四、优点 五、缺点 六、适用场景 一、定义 前端继承是指在面向对象编程中&#xff0c;一个对象可以继承另一个对象的属性和方法。在前端领域&#xff0c;通常是指…

HC32F460KETA PETB JATA 工业 自动化 电机

HC32F460 系列是基于 ARM Cortex-M4 32-bit RISC CPU&#xff0c;最高工作频率 200MHz 的高性能 MCU。Cortex-M4 内核集成了浮点运算单元&#xff08;FPU&#xff09;和 DSP&#xff0c;实现单精度浮点算术运算&#xff0c;支持 所有 ARM 单精度数据处理指令和数据类型&#xf…

【精选】基于javaweb的流浪动物领养系统(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

centos系列图形化 VNC server配置,及VNC viewer连接,2024年亲测有效

centos系列图形化 VNC server配置&#xff0c;及VNC viewer连接 0.VNC服务介绍 VNC英文全称为Virtual Network Computing&#xff0c;可以位操作系统提供图形接口连接方式&#xff0c;简单的来说就是一款桌面共享应用&#xff0c;类似于qq的远程连接。该服务是基于C/S模型的。…

鸿蒙NEXT开发-知乎评论小案例(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

vue实现列表自动滚动(纯与原生方式)

Vue实现列表自动滚动(纯与原生方式) 源码放在最后&#xff01;1.效果展示: 2.功能说明: 该滚动可能存在的Bug&#xff1a; 1.如果你写的大屏不是使用的接口轮询的方式可能会存在也页面空白的情况(需要手动刷新才能触发列表滚动)&#xff0c;因为我使用的是监听数据的变化然后…

软件供应链十年:探索开源的增长、风险和未来

回顾软件供应链状况报告的 10 年既是一个里程碑&#xff0c;也是一次行动号召。在过去十年中&#xff0c;开源消费改变了软件开发的世界。我们看到了前所未有的创新&#xff0c;但也出现了新的挑战&#xff0c;特别是在管理软件供应链的安全性和完整性方面。 在 Sonatype&…