vue实现轨迹回放(很详细)

效果

 

 

 功能

时间搜索查询轨迹并生成(默认是当前的一天的时间)

图标能跟随路径方向移动

删除了百度logo和版权信息(业务需要,不建议删除)

Vue Baidu Map

npm install vue-baidu-map --save

main.js

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'

Vue.use(BaiduMap, {
  // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
  ak: 'YOUR_APP_KEY'
})

完整的业务代码

<!-- 轨迹回放的弹窗 -->
<template>
  <el-dialog
    :title="title"
    :visible.sync="dialogVisible"
    width="50%"
    :before-close="hideDialog"
    :close-on-click-modal="false"
  >
    <div class="dialogHeader">
      <el-form :inline="true" :model="formData" class="demo-form-inline">
        <el-form-item label="日期">
          <el-date-picker
            v-model="formData.dateStr"
            type="date"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            placeholder=""
          >
          </el-date-picker>
        </el-form-item>

        <el-form-item label="时间">
          <el-time-picker
            is-range
            v-model="formData.timeArr"
            range-separator="至"
            start-placeholder="开始时间"
            end-placeholder="结束时间"
            value-format="HH:mm:ss"
            placeholder=""
          >
          </el-time-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="getPath">查询</el-button>
          <el-button type="warning" @click="playPoints">
            {{ play ? "暂停" : "播放" }}
          </el-button>
        </el-form-item>
      </el-form>
    </div>

    <!-- 百度地图 -->
    <baidu-map
      @ready="bMapReady"
      class="map"
      :center="centerPoint"
      :zoom="zoom"
      :ak="bdAk"
      :dragging="true"
      :auto-resize="true"
      :scroll-wheel-zoom="true"
    >
      <!-- 运行轨迹的路线 -->
      <bm-polyline
        stroke-color="blue"
        :path="path"
        :stroke-opacity="0.5"
        :stroke-weight="3"
        :editing="false"
      ></bm-polyline>

      <!-- marker 可以展示的图标 起点、终点 -->
      <bm-marker
        :icon="startMarkIcon"
        :position="{ lng: startMark.lng, lat: startMark.lat }"
      ></bm-marker>
      <bm-marker
        :icon="endMarkIcon"
        :position="{ lng: endMark.lng, lat: endMark.lat }"
      ></bm-marker>
      <bml-lushu
        @stop="reset"
        :path="path"
        :icon="icon"
        :play="play"
        :rotation="true"
        :speed="100"
      >
      </bml-lushu>
    </baidu-map>
  </el-dialog>
</template>

<script>
import { BmlLushu } from "vue-baidu-map";
import { queryLocus } from "@/api/forklift/carInfo";

export default {
  name: "trackPlaybackDialog",
  components: {
    BmlLushu,
  },
  data() {
    return {
      title: "",
      dialogVisible: false,
      formData: {
        dateStr: "",
        timeArr: ["00:00:00", "23:59:59"],
      },
      bdAk: "YOUR_APP_KEY", // 改成你自己的ak
      play: false, // 是否自动播放轨迹动画
      path: [],
      polylinePath: [],
      centerPoint: { lng: 116.404, lat: 39.915 }, // 地图中心点
      zoom: 11, // 缩放层级
      icon: {
        // url: "http://api.map.baidu.com/library/LuShu/1.2/examples/car.png",
        url: require("../../../../public/img/btnIcon/forklist1.png"),
        size: { width: 52, height: 26 },
        opts: { anchor: { width: 27, height: 13 } },
      },
      startMark: {}, // 起点
      startMarkIcon: {
        // url: "http://api.map.baidu.com/library/LuShu/1.2/examples/car.png",
        url: require("../../../../public/img/btnIcon/startPoint.png"),
        size: { width: 52, height: 38 },
        opts: { anchor: { width: 19, height: 38 } },
      }, // 起点图标配置
      endMark: {}, // 终点
      endMarkIcon: {
        // url: "http://api.map.baidu.com/library/LuShu/1.2/examples/car.png",
        url: require("../../../../public/img/btnIcon/endPoint.png"),
        size: { width: 52, height: 38 },
        opts: { anchor: { width: 19, height: 38 } },
      }, // 终点图标配置
      BMap: null,
    };
  },

  computed: {
    /**
     * @计算属性 设置默认当前日期的年月日
     * */
    timeDefault() {
      const date = new Date();
      let res =
        date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
      return res;
    },
  },

  methods: {
    showDialog(data) {
      this.title = data.title;
      this.carId = data.data.id;
      this.dialogVisible = true;
      this.formData.dateStr = this.timeDefault;
      this.getPath();
    },
    hideDialog() {
      this.dialogVisible = false;
      this.false = false;
      this.startMark = {};
      this.endMark = {};
    },

    /**
     * 停止播放运行轨迹
     * */
    reset() {
      this.play = false;
    },

    /**
     * @Interface 查询运行轨迹
     * */
    getPath() {
      let queryObj = {
        carId: this.carId,
        beginTime: this.formData.dateStr + " " + this.formData.timeArr[0],
        endTime: this.formData.dateStr + " " + this.formData.timeArr[1],
      };
      queryLocus(queryObj).then((res) => {
        this.play = false;
        if (res.data !== [] && res.data.length > 0) {
          // 关键部分
          this.path = [];
          let length = res.data.length;
          let middle = -1;
          if (length % 2 === 0) {
            middle = length / 2 + 1;
          } else {
            middle = (length + 1) / 2;
          }
          res.data.forEach((item, index) => {
            // this.path.push({
            //   lng: JSON.parse(item.longitude),
            //   lat: JSON.parse(item.latitude),
            // }); // ??? 会导致rotation失效且控制台一直报错
            this.path.push(new this.BMap.Point(item.longitude, item.latitude));
          });
          this.centerPoint = this.path[middle]; // 地图中心点
          this.startMark = this.path[0]; // 起点
          this.endMark = this.path[this.path.length - 1]; // 终点
          this.zoom = 19; // 地图缩放层级
        } else {
          this.$message.warning("当前时间段没有运行轨迹");
          this.path = [];
          this.zoom = 11;
        }
      });
    },

    /**
     * 播放/暂停 运行轨迹
     * */
    playPoints() {
      this.play = !this.play;
    },

    /**
     * @Event 方法
     * @description: 获取百度地图实例
     * */
    bMapReady({ BMap, map }) {
      this.BMap = BMap;
    },
  },
};
</script>

<style lang="scss" scoped>
::v-deep .el-dialog {
  min-width: 1200px !important;
}

.dialogHeader {
}

.mapBox {
  width: 1180px;
  height: 70vh;
  z-index: 999 !important;
}

.map {
  width: 100%;
  height: 70vh;
}

::v-deep .anchorBL {
  display: none !important; // 删除百度地图logo和版权信息
}
</style>

图标

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

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

相关文章

Android如何做出带有复杂水印的图片

最近项目中存在图片加水印效果的需求&#xff0c;具体效果如下: 然后做出来的效果如下&#xff1a; 原图水印图 点击可以查看大图&#xff1a;大图 那么针对这种比较复杂的水印图片&#xff0c;应该如何去做呢&#xff1f;下面我分享一下自己的思路。 如果没有使用到NDK&…

Web基础与HTTP协议

HTML概述 HTML叫做超文本标记语言&#xff0c;是一种规范&#xff0c;也是一种标准&#xff0c;它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件&#xff0c;通过在文本文件中添加标记符&#xff0c;可以告诉浏览器如何显示其中的内容。 HTML命令可…

Maven项目中的依赖出现版本冲突,最终发现是对Dependency Scope理解有误

再来个文章目录 文章目录背景疑问排查过程问题存在的原因总结示例依赖版本说明本文记录一下遇到maven依赖版本冲突后的排查过程说明以及问题原因说明 下面还有投票&#xff0c;帮忙投个票&#x1f44d; 背景 最近加入了 Apache Dubbo 开源社区&#xff0c;成为了一名Dubbo Con…

Win11的两个实用技巧系列之找不到wifi网络的解决方法、双系统开机选择系统方法

Win11装了VMware后找不到wifi网络的解决方法 有用户在电脑上安装了VMware虚拟机来使用的时候&#xff0c;发现虚拟机中无法进行无线网络的连接了&#xff0c;本文就为大家带来了详细的解决方法&#xff0c;一起看看吧 Win11装了VMware后找不到wifi网络的解决方法教学分享。有用…

数据库系统工程师——考试分析(2023备考)

⏰1、考试时间 2023年5月27日 上午 9:00~11:30 基础知识 下午 14:00~16:30 应用技术 ❓ 2、考核标准 所有科目达到45分为合格&#xff0c;任何一个科目低于45分的&#xff0c;都算不合格。 &#x1f4af; 3、考情分析 科目一&#xff1a;基础知识 客观题&#xff1a;75空 …

【虚幻引擎】UE4 动画蓝图,动画,状态机三者之间的联系

一、动画蓝图 动画蓝图是将基础动作整到一起并且能够使得动作之间切换变得很自然的一个蓝图。 以第三人称为例 动画&#xff1a;每一个基础动作都是一个动画资源&#xff0c;基础动作包括&#xff0c;站立&#xff0c;行走&#xff0c;跑步&#xff0c;蹲下&#xff0c;跳跃等…

UTONMOS:2023年,亚洲或将实现区块链游戏复兴

在3A级游戏IP的支持下&#xff0c;游戏行业的主要参与者对区块链的采用更加保守&#xff0c;最显著的试验是游戏组件的资产数字化&#xff0c;例如将其角色、道具等变成 NFT。 鉴于传统游戏厂商们将在今年发布一系列链游&#xff0c;这将加速区块链游戏的大规模采用&#xff0…

了解Mysql

存储引擎 从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎&#xff0c;也就是说只有 InnoDB 支持事务。 InnoDB和MyISAM的区别 MyISAM是MySQL的默认数据库引擎&#xff08;5.5版之前&#xff09;。虽然性…

GP03丨宽窄基资金管理增强策略

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 正 文 大家好&#xff0c;今天我们分享股票社群第3期量化策略——ETF资金管理增强策略。 在上一期中&#xff0c;我们分享了基础版ETF轮动&#xff08;结合股票多因子排序逻辑&#xff09;策略&#xf…

面试Interview

前言 加油 原文 面试常用会话 ❶ I enclosed the following materials. 我附上以下资料。 ❷ Here is my recommendation from my college. 这是我的大学推荐信。 ❸ These are the copies of my credentials, here you are. 给您,这是我的证书复印件。 ❹ I have a TEM-…

【C++】模板进阶(非类型模板参数、类模板的特化和模板的分离编译)

之前我们讲解过模板初阶&#xff0c;没有阅读过的童鞋可以先去阅读之前的博文----->模板初阶 本章我们将针对模板进行进一步的讲解。 目录 &#xff08;一&#xff09;非类型模板参数 &#xff08;二&#xff09;模板的特化 &#xff08;1&#xff09;概念 &#xff0…

asa(苹果Apple Search Ads平台)授权调用接口

一、OAuth 认证 1. 认证流程 Implementing OAuth for the Apple Search Ads API This implementation process guides you through the following steps: Invite users with API permissions.Generate a private-public key pair.Extract a public key from your persisted…

【设置应用程序图标-启动图片 Objective-C语言】

一、iPhone屏幕的尺寸 1.一种尺寸就是3.5英寸吧,iPhone3GS、iPhone4、iPhone4S,是不是都是3.5英寸的, 但是从iPhone4、iPhone4S开始,屏幕变成视网膜屏幕了, 像素变成2倍了, 所以,只要图片里有@2x,是为视网膜屏幕准备的, 只要图片里没有@2x,是为非视网膜屏幕准备的…

Vue:初识Vue

1、首先要导入vue.js <!-- 当你使用script标签安装vue之后&#xff0c;上下文就注册了一个全局变量vue --><script src"../1.Vue/js/vue.js"></script> 不能直接调用vue()&#xff0c;需要new vue(),否则会报错。 2、关于vue构造函数的参数opti…

02.数据结构之算法

算法&#xff1a;算法是解决特定问题求解步骤的描述 在计算机中表现为指令的有限序列 并且每条指令表示一个或多个操作。 重点是高效。 算法是解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示一个或多个操作。 好的算法…

指针的详细运用介绍(高阶)

目录 一&#xff1a;指针数组与数组指针 二&#xff1a;数组参数 指针参数 三&#xff1a;函数指针 函数指针数组&#xff1a; 回调函数 qsort库函数的介绍 结尾 一&#xff1a;指针数组与数组指针 指针数组 - 是数组 -是指一种存放指针的数组 数组指针 - 是…

NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037

首先我们先看一下kafka消费者流程,可以看到,我们需要创建一个consumeKafka_0_10 因为我们用的kafka的版本是0_10的对吧,要用对应版本的,消费者,然后,再用一个logattribute处理器,消费的 数据我们放到这个处理器里面进行查看 然后再就是需要配置consumekafka_0_10的,这个消费者…

Vue3通透教程【九】父子组件通讯一目了然

文章目录&#x1f31f; 写在前面&#x1f31f; 父 &#x1f449; 子&#x1f31f; 子 &#x1f449; 父&#x1f31f; 写在最后&#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文…

基于价值认同的需求侧电能共享分布式交易策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

大数据=SQL Boy,SQL Debug打破SQL Boy 的僵局

网上经常盛传 大数据sql boy&#xff0c;后端开发crud boy&#xff0c;算法工程师调参boy 在大数据领域也工作了好几年了&#xff0c;确实大数据开发&#xff0c;很多工作就是写sql&#xff0c;hive sql、spark sql、flink sql等等sql 一、背景&#xff1a; 但是经常有这样一…
最新文章