Vue中实现车辆轨迹回放(高德地图)功能:

2023-11-04

1.思路:
【1】先获取key=>官网:https://lbs.amap.com/?ref=https://console.amap.com
【2】下载并导入依赖=》npm install vue-amap -S
【3】使用
2、官网=》右上角控制台

在这里插入图片描述

3、使用过程:

【1】安装依赖:

npm install vue-amap --save-dev

【2】main.js中注册:

import AMap from 'vue-amap'
Vue.use(AMap)
AMap.initAMapApiLoader({
  key: '你申请的key',
  plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor'],
  // 默认高德 sdk 版本为 1.4.4
  v: '1.4.4'
})

【3】页面中使用:

/* 
    车辆轨迹
 */
<template>
    <div class="main">
    	//容器的宽高不能少
        <section class="section">
        	//这里地图,style="width:100%;height:100%"这个不能少
            <div id="container" style="width:100%;height:100%" />
				
			//这里是控制轨迹的按钮组
            <div class="ebox">
              <el-button-group>
                 <input type="button" class="btn" value="开始动画" id="start" @click="startAnimation()" />
                 <input type="button" class="btn" value="暂停动画" id="pause" @click="pauseAnimation()" />
                 <input type="button" class="btn" value="继续动画" id="resume" @click="resumeAnimation()" />
                 <input type="button" class="btn" value="停止动画" id="stop" @click="stopAnimation()" />
                 <el-button type="primary" icon="el-icon-search" @click="startAnimation()">轨迹回放</el-button>
                 <el-button type="danger" icon="el-icon-delete" @click='clearVehicleTrajectory'>轨迹清除</el-button>
             </el-button-group>
          </div>
        </section>
    </div>
</template>

<script>
export default {
    name: 'dashboard',
    data() {
        return {
            firstArr: [116.478935, 39.997761], //中心点/初始坐标=>联调时,用后台数据将此数据覆盖
            
            //绘制线路需要的坐标=>联调时,用后台数据将此数据覆盖(经纬度不要写反了,反了是出不来的)
            lineArr: [
                [116.478935, 39.997761],
                [116.478939, 39.997825],
                [116.478912, 39.998549],
                [116.478912, 39.998549],
                [116.478998, 39.998555],
                [116.478998, 39.998555],
                [116.479282, 39.99856],
                [116.479658, 39.998528],
                [116.480151, 39.998453],
                [116.480784, 39.998302],
                [116.480784, 39.998302],
                [116.481149, 39.998184],
                [116.481573, 39.997997],
                [116.481863, 39.997846],
                [116.482072, 39.997718],
                [116.482362, 39.997718],
                [116.483633, 39.998935],
                [116.48367, 39.998968],
                [108.983569, 34.285675],
                [106.205794, 38.458831],
                [111.761777, 40.875595],
                [103.85094, 35.987496]
            ],
            map: null,
            marker: null,
            //moveSpeed:1000000,//需求要求改变速度的可保留
        }
    },
    mounted() { //异步加载(否则报错initMap is not defined)
        setTimeout(() => {
            this.initMap() // 初始化地图
            this.initroad()// 初始化轨迹
        }, 1000)
    },
    beforeDestroy() {//离开页面,销毁掉
        this.map && this.map.destroy();
    },
    methods: {
        // 初始化地图
        initMap() {
            this.map = new AMap.Map('container', {
                resizeEnable: true, // 窗口大小调整
                center: this.firstArr, // 中心 firstArr: [116.478935, 39.997761],
                zoom: 15
            })
            // 添加工具栏
            this.map.plugin(['AMap.ToolBar', 'AMap.Scale'], () => {
                const toolbar = new AMap.ToolBar()// 工具条
                const scale = new AMap.Scale() // 比例尺
                this.map.addControl(toolbar)
                this.map.addControl(scale)
            })
            // 添加maker
            this.marker = new AMap.Marker({
                map: this.map,
                position: this.firstArr,
                icon: 'https://webapi.amap.com/images/car.png',
                offset: new AMap.Pixel(-26, -13), // 调整图片偏移
                autoRotation: true, // 自动旋转
                angle: -90 // 图片旋转角度
            })
        },
        // 初始化轨迹
        initroad() {
			// 将 icon 传入 marker(起始标记)
            var startMarker = new AMap.Marker({
                // position: new AMap.LngLat(116.35, 39.89),
                position: this.lineArr[0],
                icon: startIcon,
                offset: new AMap.Pixel(-13, -30)
            });
            // 创建一个 icon
            var endIcon = new AMap.Icon({
                size: new AMap.Size(25, 34),
                image: '//a.amap.com/jsapi_demos/static/demo-center/icons/dir-marker.png',
                imageSize: new AMap.Size(135, 40),
                imageOffset: new AMap.Pixel(-95, -3)
            });
            // 将 icon 传入 marker
            var endMarker = new AMap.Marker({
                // position: new AMap.LngLat(116.45, 39.93),
                position: this.lineArr[this.lineArr.length - 1],
                icon: endIcon,
                offset: new AMap.Pixel(-13, -30)
            });
            // 将 markers 添加到地图
            this.map.add([startMarker, endMarker]);

		
            // 绘制还未经过的路线
            this.polyline = new AMap.Polyline({
                map: this.map,
                path: this.lineArr,
                showDir: true,
                strokeColor: '#28F', // 线颜色--蓝色
                // strokeOpacity: 1,     //线透明度
                strokeWeight: 10, // 线宽
                // strokeStyle: "solid"  //线样式
                lineJoin: 'round' // 折线拐点的绘制样式
            })
            // 绘制路过了的轨迹
            var passedPolyline = new AMap.Polyline({
                map: this.map,
                strokeColor: '#AF5', // 线颜色-绿色
                // path: lineArr.reverse(),
                // strokeOpacity: 1,     //线透明度
                strokeWeight: 6 // 线宽
                // strokeStyle: "solid"  //线样式
            })
            this.marker.on('moving', e => {
                passedPolyline.setPath(e.passedPath)
            })
            this.map.setFitView() // 合适的视口
        },
        startAnimation() {//车辆轨迹回放开始
            this.marker.moveAlong(this.lineArr, 1000000); //这里的1000000为速度,可根据绘制线路需要的坐标来调整
            //(调试时不要设置太小了,不然看不出来)
            //this.marker.moveAlong(this.lineArr, this.moveSpeed); 
        },
        pauseAnimation() {//车辆轨迹回放暂停
            this.marker.pauseMove();
        },
        resumeAnimation() {//车辆轨迹回放继续
            this.marker.resumeMove();
        },
        stopAnimation() {//车辆轨迹回放停止
            this.marker.stopMove();
        },
        carFastMove() {//车辆轨迹回放改变速度
      		this.moveSpeed = this.moveSpeed * 200;
    	},
    	// 表格选中单行
        handleTableRow(row, event, column) {
            const This = this
            This.firstArr = []
            This.firstArr.push(row.longitude)
            This.firstArr.push(row.latitude)
            This.initMap()//初始化地图

			//获取后台路线数据
            //This.formData.deviceNumber = row.deviceNumber
            //This.getVehicleCarGpsData()//渲染轨迹
        },
        // 轨迹清除
        clearVehicleTrajectory() {
            const This = this
            This.initMap()//初始化地图
            //This.getVehicleCarGpsData()//后台数据渲染轨迹
        },
    }
 }
4.需要加减速,前进,后退
5.实现过程中出现的问题:
报错:AMap is not defined

在这里插入图片描述

//解决问题:
  mounted() {
     setTimeout(() => {
         this.initMap() //异步加载(否则报错initMap is not defined)
         this.initroad()
      }, 1000)
  },

vue-amap报错AMap is not defined no-undef
Uncatch Invaild object:pixel(NaN,Nan)或者Uncatch (in promise) invaild object:LngLat(NaN,Nan):

6.最终效果:

若需要别的功能可到高德API查找
在这里插入图片描述

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

Vue中实现车辆轨迹回放(高德地图)功能: 的相关文章

随机推荐

  • 解释React为什么onClick函数绑定都用箭头函数()=>{}

    前言 起因在于今日同事问起 发现不能很好的解释这个问题 所以自己下来重新屡了一下思路 记录一下 一 什么是箭头函数 以及为什么React里要用箭头函数 1 下面这两个函数相同 只是react组件化 不支持在组建内部写function 所以现
  • [Xilinx FPGA] #8 Xilinx Power Estimator[XPE, 功耗估计器]的使用方法

    对于 FPGA 设计来说 设计结果的功耗是较为重要的一个设计指标 有时在设计完成前对设计的功耗有一个大体的估计 Xilinx 专门为此设计了一个工具 以使设计者可以在设计完成前根据预设对功耗进行大致的预估 可参考 Xilinx Power
  • 服务因 找不到指定的模块。 服务特定错误而停止。

    新装了sql server 2008 发现sqlserver 服务没法起来 查看系统日志是7024如下 c sharp view plain copy 事件类型 错误 事件来源 Service Control Manager 事件种类 无
  • vue3 ref属性

    vue3 ref属性 操作单个DOM元素 操作单个DOM或者组件的流程 定义一个响应式变量 把变量返回给模板使用 模板中绑定上述返回的数据 可以通过info变量操作DOM或者组件实例
  • 求绝对值函数abs()到底应该包含哪个头文件

    C C 语言的标准库里包含求绝对值的函数abs 可是它到底是在哪个头文件里面声明的呢 C语言中 求整数的绝对值abs 和labs 应该包含stdlib h 求浮点数的绝对值fabs 应该包含math h 在C 中 只需要包括cmath即可
  • 半导体材料概述 -测试测量制造

    前言 半导体概述 半导体材料作为半导体产业链上游的重要环节 在芯片的生产制造过程中起到关键性作用 根据芯片制造过程划分 半导体材料主要分为基体材料 制造材料和封装材料 其中 基体材料主要用来制造硅晶圆或化合物半导体 制造材料主要是将硅晶圆或
  • CSAPP Datalab实验

    实 验 二 题 目 DataLab 数据表示 专 业 计算机科学与技术 计算机科学与技术学院 目 录 第1章 实验基本信息 4 1 1 实验目的 4 1 2 实验环境与工具 4 1 2 1 硬件环境 4 1 2 2 软件环境 4 1 2 3
  • 量化交易/基金爬虫(一)

    先说说这个python脚本的初衷 就是为了给将来的量化交易 实现自动化亏钱做一个基石 打一下基础 但是没想到的是 在写完这个脚本之后 仅仅两天时间 我全部的收益就被赔光 哭了 import requests from bs4 import
  • 数据库原理与应用第三版何玉洁第三章课后题答案

    1 关系模型的结构 关系操作 关系的完整性约束 2 1 笛卡尔积实际上就是一个二维表 2 主键也称为主关键字 时表中的属性或属性组 用于唯一的确定一个元组 3 候选键 一个属性或属性集能够唯一表示一个关系的元组而又不包括多余的属性 则改属性
  • Unicode字符编码表

    十进制 十六进制 字符数 编码分类 中文 编码分类 英文 起始 终止 起始 终止 个 0 127 0000 007F 128 C0控制符及基本拉丁文 C0 Control and Basic Latin 128 255 0080 00FF
  • 计算机网络属性设置方法,电脑网络连接属性怎么设置

    方法1在安装系统时对Internet连接进行设置在安装WindowsXP过程中 进行Internet连接设置时 可以按提示输入用户名和密码并设置成开机自动连接宽带 这样在安装完成后每次开机就能自动连接宽带了 方法2将宽带连接添加到启动组首先
  • vue导出excel表格vue-json-excel(最新超容易详细教程)

    最近写一个报名的小程序后台 需要导出页面表格为excel 实现这个功能所以记录一下 目前大多数采取的都是 xlsx 我这里使用的是vue json excel 相对来说更容易上手实现效果 安装依赖 npm install vue json
  • 消除过期的对象引用的理解

    什么是过期的对象引用 我们通过简单的栈实现来引入过期的对象引用 public class Stack private Object elements private int size 0 private static final int D
  • 转载1-Python 字符串操作

    Python 字符串操作 string替换 删除 截取 复制 连接 比较 查找 包含 大小写转换 分割等 1 去空格及特殊符号 s strip s lstrip s rstrip s strip lstrip rstrip 声明 s为字符串
  • 复制chrome请求头以及Copy as cURL直接转成python代码

    python爬虫经常需要复制浏览器请求头 之前都是用pycharm批量替换 今天想看看有啥方便的方法没 结果发现了超出预期的东西 chrome的Copy as cURL 和curl to python 下图是Copy as cURL pyt
  • 【基于python+flask的奥运会数据可视化分析-哔哩哔哩】 https://b23.tv/i6iMYGr

    基于python flask的奥运会数据可视化分析 哔哩哔哩 https b23 tv i6iMYGr https b23 tv i6iMYGr
  • 七牛云对象存储实现文件的上传与下载

    今天记录下通过七牛云文件存储来实现文件的上传与下载 文件上传 上传 throws FileNotFoundException private static void upload throws FileNotFoundException 构
  • Doris 导出表结构或数据

    MYSQLDUMP 导出表结构或数据 Doris 在0 15 之后的版本已经支持通过mysqldump 工具导出数据或者表结构 导出查询结果集 Apache Doris 使用示例 导出 导出 test 数据库中的 table1 表 mysq
  • Makefile 中:= ?= += =的区别

    原文链接 https www cnblogs com wanqieddy archive 2011 09 21 2184257 html 在Makefile中我们经常看到 这几个赋值运算符 那么他们有什么区别呢 我们来做个简单的实验 新建一
  • Vue中实现车辆轨迹回放(高德地图)功能:

    1 思路 1 先获取key gt 官网 https lbs amap com ref https console amap com 2 下载并导入依赖 npm install vue amap S 3 使用 2 官网 右上角控制台 3 使用