vue3+高德地图,使用抛物线连接两点,实现线路脉冲和呼吸灯动画效果

news2025/1/12 10:00:48

最终实现效果

一:版本vue3+jsAPI2.0+loca2.0.0

二:下载地图加载器

npm i @amap/amap-jsapi-loader --save

高德地图jsApi2.0,点击查看官网介绍

三:写成一个组件,哪里使用哪里引入即可,代码如下

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

let map = null;

onMounted(() => {
  AMapLoader.load({
    key: "输入你的key", // 申请好的Web端开发者Key,首次调用 load 时必填
    version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    Loca:{version:'2.0.0'}
  })
    .then((AMap) => {
      map = new AMap.Map('container', {
            zoom: 6,//地图缩放级别
            // showLabel: false,//是否显示地图文字标记
            viewMode: '3D',//地图类型
            pitch: 50,//倾斜角度
            center:[116.397428, 39.90923],//地图中心点
            mapStyle: 'amap://styles/45311ae996a8bea0da10ad5151f72979',//地图样式
        });

        var loca = new Loca.Container({
            map:map,
        });

        // 呼吸点
        var scatter = new Loca.ScatterLayer({
            loca,
            zIndex: 10,
            opacity: 0.6,
            visible: true,
            zooms: [2, 22],
        });

        var pointGeo = new Loca.GeoJSONSource({
          data: {
            "type": "FeatureCollection",
            "features": [
            {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  116.397428, 39.90923
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                    125.34,
                    43.82
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 0,
                  "ratio": 0.0369,
                  "lineWidthRatio": 1
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                    113.78,
                    34.76
                  ]
                }
              }, {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                    91.17,
                    29.65
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  114.02,33.01
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  120.63,28.06
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 0,
                  "ratio": 0.0369,
                  "lineWidthRatio": 1
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  114.12,22.53
                  ]
                }
              }, {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  108.96,34.28
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 0,
                  "ratio": 0.0369,
                  "lineWidthRatio": 1
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  84.89,45.58
                  ]
                }
              }, {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "Point",
                  "coordinates": [
                  118.80,32.06
                  ]
                }
              },
            ]
          }
            // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/pulselink-china-city-point.json',
        });
        scatter.setSource(pointGeo);
        scatter.setStyle({
            unit: 'px',//meter/px=米/像素
            size: [50, 50],//呼吸点尺寸
            borderWidth: 0,//描边宽
            texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png',//呼吸点图片
            duration: 2000,//动画时间
            animate: true,//开启动画
        });
        loca.add(scatter);

        // 弧线
        var pulseLink = new Loca.PulseLinkLayer({
            // loca,
            zIndex: 10,
            opacity: 1,
            visible: true,
            zooms: [2, 22],
            depth: true,
        });

        var geo = new Loca.GeoJSONSource({
            // url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/data-line-out.json',
          data: {
            "type": "FeatureCollection",
            "features": [
              {
                "type": "Feature",
                "properties": {
                  "type": 0,
                  "ratio": 0.0369,
                  "lineWidthRatio": 1
                },
                "geometry": {
                  "type": "LineString",
                  "coordinates": [
                    [
                      116.41,
                      39.90
                    ],
                    [
                      125.34,
                      43.82
                    ]
                  ]
                }
              },
              {
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "LineString",
                  "coordinates": [
                    [
                      113.78,
                      34.76
                    ],
                    [
                      91.17,
                      29.65
                    ]
                  ]
                }
              },{
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "LineString",
                  "coordinates": [
                    [
                    84.89,45.58
                    ],
                    [
                    118.80,32.06
                    ]
                  ]
                }
              },{
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "LineString",
                  "coordinates": [
                    [
                    114.02,33.01
                    ],
                    [
                    120.63,28.06
                    ]
                  ]
                }
              },{
                "type": "Feature",
                "properties": {
                  "type": 1,
                  "ratio": 0.035,
                  "lineWidthRatio": 0.9447674418604651
                },
                "geometry": {
                  "type": "LineString",
                  "coordinates": [
                    [
                    114.12,22.53
                    ],
                    [
                    108.96,34.28
                    ]
                  ]
                }
              },]
          }
        });

        pulseLink.setSource(geo);
        pulseLink.setStyle({
            unit: 'meter',//meter/px=米/像素
            dash: [40000, 0, 40000, 0],//连接线的虚线配置信息:[实线长度,虚线长度,实线长度,虚线长度]
            lineWidth: function () {//连接线的头尾宽度设置:[起点宽度,终点宽度]:单位跟随unit字段变化
                return [20000, 1000];//头部宽尾部窄样式
            },
            height: function (index, feat) {//弧线顶部高度
                return feat.distance / 3 + 10;
            },
            // altitude: 1000,
            smoothSteps: 30,//平滑步数,代表弧线的分隔段数,越大平滑度越好,但更消耗性能,默认为50。
            speed: function (index, prop) {//两点之间距离越长,速度越快
              return prop.distance<1000000?100000:
              prop.distance<2000000?200000:
              prop.distance<3000000?300000:
              prop.distance<4000000?400000:
              prop.distance<5000000?500000:600000
            },
            flowLength: 150000,//脉冲点的长度。单位跟随unit字段变化。如果不希望有脉冲动画,设置此长度为0即可。
            lineColors: function (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();//开启动画


        // 点击事件处理
        var clickInfo = new AMap.Marker({
            anchor: 'bottom-center',
            position: [116.396923, 39.918203, 0],
        });
        clickInfo.setMap(map);
        clickInfo.hide();
        map.on("click", function (e) {
            var feat = pulseLink.queryFeature(e.pixel.toArray());

            if (feat) {
                clickInfo.show();
                var 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();
            }
        });

        var dat = new Loca.Dat();
        dat.addLayer(pulseLink);
     
    })
    .catch((e) => {
      console.log(e);
    });
});

onUnmounted(() => {
  map?.destroy();
});
</script>

<template>
  <div id="container"></div>
</template>

<style scoped>
#container {
  width: 100%;
  height: 100vh;
}
</style>

请注意

jsapi与loca版本详情,点击查看

最后再来看一下页面实际效果

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

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

相关文章

深度揭秘:全氟己酮自动灭火毯的原理是什么?

全氟己酮自动灭火毯是近年来很受欢迎的新型消防灭火装置&#xff0c;它不仅高效环保、使用简单、无需安装任何附加设备&#xff0c;还可以主动感应到火灾并自动灭火。为什么它能够做到这一点呢&#xff1f;这要从全氟己酮自动灭火毯的原理说起。 全氟己酮自动灭火毯的原理是什…

JAVA 并发编程之死锁的产生及避免

死锁的产生 死锁可以理解为&#xff0c;在多线程并发竞争资源的环境下&#xff0c;在各自拥有锁的情况下&#xff0c;又去尝试获取对方的锁&#xff0c;从而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将一直阻塞下去。 代码示例&#xff1a; public cl…

分享|创业老阳推荐的Temu蓝海项目到底怎么样?

在当今竞争激烈的创业市场中&#xff0c;寻找一个具有潜力的蓝海项目成为了众多创业者的梦想。近日&#xff0c;创业老阳推荐的Temu蓝海项目引起了广泛关注。那么&#xff0c;这个项目到底怎么样呢?让我们一起来探讨一下。 首先&#xff0c;Temu蓝海项目在定位上具有显著优势 …

YOLOv8改进 添加大核卷积序列注意力机制LSK

一、Large Separable Kernel Attention论文 论文地址:2309.01439.pdf (arxiv.org) 二、Large Separable Kernel Attention注意力结构 LSK通过使用大型可分离卷积核来提升注意力机制的效果。在传统的注意力机制中,常用的是小型卷积核,如1x1卷积,来计算注意力权重和特征表示…

Junit单元测试框架 --java学习笔记

单元测试 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试 之前是如何进行单元测试的?有什么问题? 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试无法实现自动化测试&#xff0c;一个方法测试失败&#xff0c;可能影响其他方法…

poi

文章目录 字号对照 字号对照

MQ中的交换机与队列

交换机与队列的介绍 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff…

HarmonyOS实战开发-如何实现设备中应用时长的统计功能。

介绍 本示例使用bundleState相关接口完成设备中应用时长的统计功能。 效果预览 使用说明&#xff1a; 1.顶部的数据面板展示了最常用的五个应用的使用时间占比情况。 2.中部的竖向滑动栏展示了每个应用的使用总时长和最后一次使用的时间。 3.底部的横向滑动栏展示了不常用…

lua学习笔记15(元表的学习)

print("*****************************元表的学习*******************************") print("*****************************元表的概念*******************************") --任何变量都可以作为另一个表变量的元表 --任何表变量都可以有自己的元表 --当我…

以XX大学学生公寓为例的安科瑞远程抄表与配电能效系统解决方案【AcrelEMS-EDU校园综合能效管理】

建设背景 随着我国经济的高速发展&#xff0c;建筑能耗特别是国家机关办公建筑和大型公共建筑高耗能的问题日益突出。学校作为大型公共机构建筑的重要组成部分之一&#xff0c;其特点是占地面积大、建筑分布广、数量多、类型多样、用能情况复杂&#xff1b; 高校用能普遍问题…

私藏十几款营销软件工具:含视频、剧本素材、推流工具等精品免费软件工具!

很多小伙伴在操作自媒体的时候&#xff0c;都或多或少遇到过问题&#xff1a; 哪些剪辑工具好用&#xff1f;哪些素材网站可以用&#xff1f;哪里找选题&#xff1f;哪里找创意和热点&#xff1f;脚本怎么写&#xff1f;剧本怎么做&#xff1f; 工欲善其事&#xff0c;必先利…

【中文医疗词嵌入模型】SMedBERT:结构化知识图谱 + 混合注意力机制 + 提及-邻居上下文建模

【中文医疗词嵌入模型】SMedBERT&#xff1a;结构化知识图谱 混合注意力机制 提及-邻居上下文建模 提出背景SMedBERT 具体到点的设计逻辑SMedBERT的背景SMedBERT的工作原理 SMedBERT 具体实现细节3.1 符号和模型3.2 Top-K Entity Sorting3.3 提及-邻居混合注意力3.4 提及-邻居…

详解实现黑马旅游网的ES和Mysql数据同步

1、需求分析 我们知道es中的数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;es也必须跟着改变&#xff0c;否则会导致数据不一致问题&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 如何实现数据同步&#xff1a; 方案一&#xff1a;同步…

html骨架以及常见标签

推荐一个网站mdn。 html语法 双标签&#xff1a;<标签 属性"属性值">内容</标签> 属性&#xff1a;给标签提供附加信息。大多数属性以键值对的形式存在。如果属性名和属性值一样&#xff0c;可以致谢属性值。 单标签&#xff1a;<标签 属性"属…

备考分享丨云计算HCIE实验考试需要注意什么

去年九月底我在朋友的推荐下报考了誉天的云计算方向&#xff0c;在此期间我非常感谢田sir、苗苗老师和凡凡老师&#xff0c;每次我遇见问题找他们都能给我完完全全的解决&#xff0c;给我这个非科班出身的学员很大的鼓励与帮助。 我是经济学专业&#xff0c;毕业之后没有考研&…

识典百科词条创建技巧,教你如何轻松创建热门识典百科词条!

网络已经成为人们获取知识和信息的主要途径。在这样一个背景下&#xff0c;识典百科作为一个综合性的网络百科全书&#xff0c;在为读者们提供各种知识的同时&#xff0c;也给广大用户提供了一个创建、编辑和分享知识的平台。如何在识典百科上创建一个高质量的词条&#xff0c;…

你的PCB地线走的对吗?为什么要有主地?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;原创文章欢迎点赞分享&#xff01; PCB layout需要丰富的经验和扎实的理论基础支持&#xff…

基于SpringBoot+vue的在线商城系统+论文+免费远程调试

基于SpringBootvue的在线商城系统034(含源码 数据库文档免费送&#xff09; 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springb…

天锐绿盾 || 透明加密保护公司电脑文件资料,防止外泄

#天锐绿盾防泄密软件# 天锐绿盾作为一款专业的透明加密保护软件&#xff0c;专为防止公司电脑文件资料外泄而设计&#xff0c;其主要通过以下几方面实现对文件资料的透明加密保护&#xff1a; 德人合科技 || 天锐绿盾透明加密系统 PC地址&#xff1a; https://isite.baidu.c…

helm与k8基础

文章目录 一、helm二、K8S/K3S1.K8S基本组件1.1 资源对象1.2 核心组件1.3典型的创建 Pod 的流程1.4 Kubernetes 多组件之间的通信原理 三、容器运行时 Containerd1.查看当前k3s使用的容器运行时CRI2.K3S修改docker为运行环境3. Containerd 参考 一、helm Helm是Kubernetes的包…