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

在这里插入图片描述

装下这两个 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.mfbz.cn/a/890422.html

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

相关文章

论文笔记:RelationPrompt :Zero-Shot Relation Triplet Extraction

论文来源: ACL Findings 2022 论文链接:https://arxiv.org/pdf/2203.09101.pdf 论文代码:http://github.com/declare-lab/RelationPrompt 本篇论文是由阿里达摩院自然语言智能实验室于2022年发表的关于零样本关系抽取的顶会论文,本篇博客将记录我在阅读过程中的一些笔记…

​ceph掉电后无法启动osd,pgs unknown

处理办法&#xff1a; 进一步osd.0的日志检查发现提示unable to read osd superblock&#xff1a; 尝试fsck操作&#xff1a; ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --type bluestore --op fsck 如果成功&#xff0c;则到此为止。 如果失败&#xf…

K8s简介及环境搭建

一、Kubernetes简介 kubernetes 的本质是一组服务器集群&#xff0c;它可以在集群的每个节点上运行特定的程序&#xff0c;来对节点中的容器进行管理。目的是实现资源管理的自动化&#xff0c;主要提供了如下的主要功能&#xff1a; 自我修复&#xff1a;一旦某一个容器崩溃&a…

游戏加速器最新口令兑换码,最低50小时免费领取

不是月卡买不起&#xff0c;而是薅羊毛更有性价比&#xff01;游戏党福音&#xff0c;今天为玩家们分享最新一批雷雷口令兑换码&#xff0c;为您的游戏之旅全面保驾护航&#xff01; 兑换码&#xff1a;8521 兑换码&#xff1a;9989 兑换码&#xff1a;211314 兑换码&#…

springmvc的处理流程

用户把请求发到前端控制器&#xff0c;前端控制器通过handlerMapping找到controller&#xff0c;controller调用service&#xff0c;service调用dao&#xff0c;从数据库拿到要获取的数据&#xff0c;然后modelandview给前端控制器&#xff0c;前端控制器通过viewresolver解析视…

仿IOS桌面悬浮球(支持拖拽、自动吸附、自动改变透明度与点击、兼容PC端与移动端)

使用 pointerdown/pointermove/pointerup 实现仿IOS桌面悬浮球效果&#xff0c;支持拖拽、指定拖拽选对容器&#xff0c;指定拖拽安全区、自动吸附、自动改变透明度与点击&#xff0c;兼容PC端与移动端。 效果展示 https://code.juejin.cn/pen/7423757568268304421 代码实现 …

计算机网络:数据链路层 —— PPP 点对点协议

文章目录 PPP 帧PPP帧的格式PPP帧的透明传输面向字节的异步链路面向比特的同步链路 PPP帧的差错检测 PPP 的工作状态 点对点协议&#xff08;Point-to-Point Protocol&#xff0c;PPP&#xff09;是目前使用最广泛的点对点数据链路层协议&#xff0c;用于在两个节点之间进行数据…

双目视觉搭配YOLO实现3D测量

一、简介 双目&#xff08;Stereo Vision&#xff09;技术是一种利用两个相机来模拟人眼视觉的技术。通过对两个相机获取到的图像进行分析和匹配&#xff0c;可以计算出物体的深度信息。双目技术可以实现物体的三维重建、距离测量、运动分析等应用。 双目技术的原理是通过两…

【最新华为OD机试E卷-支持在线评测】英文输入法(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

多态常见面试问题

1、什么是多态&#xff1f; 多态&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许同一个接口表现出不同的行为。在C中&#xff0c;多态性主要通过虚函数来实现&#xff0c;分为编译时多态&#xff08;静态多态&#xff09;和运行时多态…

Qt事件——鼠标事件

通过label来显示各种事件 鼠标按下事件 //按下显示坐标 void MyLabel::mousePressEvent(QMouseEvent * ev) {int i ev->x();int j ev->y();//判断按下的鼠标键位if (ev->button() Qt::LeftButton) {qDebug() << "LeftButton";}else if (ev->bu…

HAL库常用的函数:

目录 HAL库&#xff1a; 1.GPIO常用函数&#xff1a; 1.HAL_GPIO_ReadPin( ) 2.HAL_GPIO_WritePin( ) 3.HAL_GPIO_TogglePin( ) 4.HAL_GPIO_EXTI_IRQHandler( ) 5.HAL_GPIO_EXTI_Callback( ) 2.UART常用函数&#xff1a; 1.HAL_U…

数通--3

一、动态路由 内部 路由器之间要互联互通&#xff0c;必须遵循相同的协议 企业内部用 IGP&#xff0c;企业之间用BGP RIP&#xff08;已淘汰&#xff0c;不考&#xff09; 距离就是长短&#xff0c;矢量就是方向&#xff0c;即路由的出接口 一台路由器 A 配好RIP&#xff0c;…

JavaWeb 17.过滤器

目录 一、过滤器概述 生活举例&#xff1a;公司前台&#xff0c;停车场安保系统&#xff0c;地铁检票闸机 过滤器开发中应用场景 过滤器工作位置图解 Filter接口API&#xff1a; 二、过滤器过滤过程图解 三、过滤器生命周期 四、过滤器链的使用 工作流程图解 注解方式配置过滤…

map和set(一)

首先模拟一下key形式类 使用的结构是搜索二叉树 结点中有左孩子和右孩子 还有一个存储的值 template <class K>struct BSTnode//搜索二叉树不支持修改 中序遍历是有序的{K _key;BSTnode<K>* _left;BSTnode<K>* _right;BSTnode(const K& key):_key(key…

网络资源模板--Android Studio 实现记事本App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的记事本App 二、项目测试环境 三、项目详情 首页 显示笔记列表&#xff1a;使用 ListView 显示从数据库中查询到的笔记内容。搜索功能&#xff…

web-105linux权限提升

rsync未授权本地覆盖 Rsync 是 linux 下一款数据备份工具&#xff0c;默认开启 873 端口 https://vulhub.org/#/environments/rsync/common/ 借助 Linux 默认计划任务调用/etc/cron.hourly&#xff0c;利用 rsync 连接覆盖 前提条件就是需要知道rsync的密码或者存在未授权 -提…

Java微信支付接入(6) - API V3 Native 支付通知API

官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_5.shtml 通知规则&#xff1a;用户支付完成后&#xff0c;微信会把相关支付结果和用户信息发送给商户&#xff0c;商户需要接收处理该消息&#xff0c;并返回应答。对后台通知交互时&#xff0c…

如何解决 Vim 中的 “E212: Can‘t open file for writing“ 错误:从编辑到权限管理(sudo)

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…