前端 百度地图绘制路线加上图片

news2024/9/21 16:20:46

使用百度官方示例的方法根据起终点经纬度查询驾车路线但是只是一个线路

<template>
  <div class="transportInfo">
    <div id="mapcontainer" class="map">
      11
    </div>
    <div class="collapse">
      <el-collapse v-model="activeNames" @change="handleChange">
        <el-collapse-item title="运输详情" name="1">
          <div class="transportHead">
            <div class="img"><img src="@/assets/images/sj.png" /></div>
            <div>
              <div>
                <span class="label">运输人员:</span
                ><span class="value">李荣/12345678901</span>
              </div>
              <div>
                <span class="label1">浙A·DA4563</span
                ><span class="value1">配送中</span>
              </div>
            </div>
          </div>
          <div class="timeline">
            <el-timeline>
              <el-timeline-item
                v-for="(activity, index) in activities"
                :key="index"
                :timestamp="activity.timestamp"
                :color="activity.color"
                placement="top"
              >
                <span style="color:rgba(12, 111, 255, 1)">{{
                  activity.person
                }}</span>
                <span style="color:rgba(26, 26, 26, 1)">{{
                  activity.renwu
                }}</span>
              </el-timeline-item>
            </el-timeline>
          </div>
        </el-collapse-item>
      </el-collapse>
    </div>
  </div>
</template>
<script>
import working from '@/assets/images/working.png'
import circle from '@/assets/images/circle.png'
export default {
  data() {
    return {
      activeNames: ['1'],
      activities: [
        {
          person: '主管部门',
          renwu: '创建送货单',
          timestamp: '2023年3月3日   18:00',
          color: 'rgba(0, 180, 42, 1)',
          size: 'normal '
        },
        {
          person: '运输人员 李荣',
          renwu: '开始运输',
          timestamp: '2018-04-13'
        },
        {
          person: '运输人员 李荣',
          renwu: '进行核验',
          timestamp: '2018-04-13'
        },
        {
          person: '工地人员 王狄锋',
          renwu: '确认签收',
          timestamp: '2018-04-11'
        }
      ]
    }
  },
  created() {},
  mounted() {
    // 百度地图API功能
    // var map = new BMap.Map('allmap')
    // map.centerAndZoom(new BMap.Point(116.404, 39.915), 11)
    // var p1 = new BMap.Point(116.301934, 39.977552)
    // var p2 = new BMap.Point(116.508328, 39.919141)
    // var driving = new BMap.DrivingRoute(map, {
    //   renderOptions: {
    //     map: map,
    //     autoViewport: true
    //   }
    // })
    // driving.search(p1, p2)
    setTimeout(() => {
      $(document).ready(function() {
        // var car1 = [
        //   ['113.208619', '23.170208', '广州', '装车', '2016-12-05 19:47:03'],
        //   ['112.622218', '26.979794', '', '装车', '2016-12-05 19:47:03'],
        //   [
        //     '113.006332',
        //     '28.263503',
        //     '长沙',
        //     '当前位置',
        //     '2016-12-05 19:47:03'
        //   ],
        //   ['111.731111', '40.842', , '呼和浩特', '暂未到达目的地']
        // ]
        var car2 = [
          ['120.230199', '30.215376', '', '杭州', '起点'],
          ['108.945456', '34.366566', '西安', '当前位置', '4km'],
          ['87.504831', '43.937895', , '乌鲁木齐', '终点']
        ]
        var mp = new BMap.Map('mapcontainer', { enableMapClick: false })
        mp.centerAndZoom(new BMap.Point(112.438233, 34.654336), 6)
        mp.enableScrollWheelZoom()
        // currentLocation(['113.006332', '28.263503'], car1)
        currentLocation(['108.945456', '34.366566'], car2)
        //标注当前车辆坐标位置
        function currentLocation(curPosArr, carArr) {
          var curPt = new BMap.Point(curPosArr[0], curPosArr[1]) //当前位置
          var curIcon = new BMap.Icon(working, new BMap.Size(52, 52))
          var curMarker = new BMap.Marker(curPt, { icon: curIcon })
          mp.addOverlay(curMarker)
          var isDraw = false //是否已经绘制过路线
          curMarker.onclick = function() {
            drawPath(carArr, isDraw)
            isDraw = true
          }
        }
        //绘制路线
        function drawPath(carArr, isDraw) {
          if (isDraw) {
            //若绘制过路线  返回 false
            return false
          }
          var pointArr = []
          var ptNum = 0
          var driving = new BMap.DrivingRoute(mp) //创建驾车实例
          // 复杂的自定义覆盖物
          function ComplexCustomOverlay(point, state, time) {
            this._point = point
            this.state = state
            this.time = time
          }
          ComplexCustomOverlay.prototype = new BMap.Overlay()
          ComplexCustomOverlay.prototype.initialize = function(map) {
            this._map = map
            var div = (this._div = document.createElement('div'))
            $(div).addClass('state-wrap')
            var str = '<div class="logistics-wrap">'
            str += `<div class="logistics-time">` + this.time + '</div>'
            str += '<div class="logistics-state">' + this.state + '</div>'
            str += '</div>'
            div.innerHTML = str
            mp.getPanes().labelPane.appendChild(div)
            var he = div.offsetHeight
            this._he = he //当前div的高度
            return div
          }
          ComplexCustomOverlay.prototype.draw = function() {
            var map = this._map
            var pixel = map.pointToOverlayPixel(this._point)
            this._div.style.left = pixel.x - 24 + 'px'
            this._div.style.top = pixel.y - this._he + 5 + 'px'
          }
          /*自定义复杂覆盖物结束*/
          for (var i = 0, len = carArr.length; i < len; i++) {
            var point = new BMap.Point(carArr[i][0], carArr[i][1])
            pointArr[i] = point
            var myIcon = new BMap.Icon(circle, new BMap.Size(16, 16))
            var marker = new BMap.Marker(point, { icon: myIcon }) // 创建标注
            mp.addOverlay(marker) // 将标注添加到地图中
            //此处解决在for循环中添加事件总是执行最后一个的情况,传入参数并且立即执行
            ;(function(point, state, time) {
              var myComOverlay = new ComplexCustomOverlay(point, state, time)
              mp.addOverlay(myComOverlay)
              marker.onclick = function() {
                //给各个点添加点击事件,显示、隐藏自定义复杂物
                if (myComOverlay.isVisible()) {
                  myComOverlay.hide()
                } else {
                  myComOverlay.show()
                }
              }
            })(point, carArr[i][3], carArr[i][4])
          }
          var len = pointArr.length - 1
          initRoute(ptNum)
          function initRoute(num) {
            driving.search(pointArr[num], pointArr[num + 1])
            driving.setSearchCompleteCallback(function() {
              var plan = driving.getResults().getPlan(0)
              var pts = plan.getRoute(0).getPath()
              var lineCor = ptNum == len - 1 ? 'red' : '#1aea0a'
              var lineSty = ptNum == len - 1 ? 'dashed' : 'solid'
              var polyline = new BMap.Polyline(pts, {
                strokeColor: lineCor,
                strokeWeight: 3,
                strokeOpacity: 0.8,
                strokeStyle: lineSty
              })
              mp.addOverlay(polyline)
              //查找下两个点
              ptNum++
              if (ptNum < len) {
                initRoute(ptNum)
              }
            })
          }
          mp.setViewport(pointArr) //自动调整视野
        }
      })
    })
  },
  methods: {
    handleChange(val) {
      console.log(val)
    }
  }
}
</script>
<style lang="less" scoped>
.transportInfo {
  padding: 0px 16px 16px 16px;
  // background-color: #ccc;
  position: relative;
  .map {
    width: 100%;
    height: calc(100vh - 220px);
  }
  .collapse {
    .el-collapse {
      position: absolute;
      top: 32px;
      left: 32px;
      width: 314px;
      border-radius: 2px;
      background: rgba(255, 255, 255, 1);

      /deep/.el-collapse-item__content {
        padding-bottom: 0px !important;
      }
      /deep/.el-collapse-item__header::before {
        content: '';
        width: 4px;
        height: 16px;
        background: rgba(12, 111, 255, 1);
        margin-right: 8px;
        margin-left: 14px;
      }
      /deep/.el-collapse-item__header {
        font-size: 14px;
        font-weight: 700;
        color: rgba(26, 26, 26, 1);
        .el-collapse-item__arrow.el-icon-arrow-right {
          color: rgba(25.5, 25.5, 25.5, 1);
        }
      }
      .transportHead {
        display: flex;
        margin-left: 14px;
        .img {
          margin-right: 8px;
        }
        .label {
          font-size: 14px;
          font-weight: 400;
          line-height: 22px;
          color: rgba(26, 26, 26, 1);
        }
        .value {
          font-size: 14px;
          font-weight: 400;
          line-height: 22px;
          color: rgba(102, 102, 102, 1);
        }
        .label1 {
          border-radius: 2px;
          background: rgba(242, 247, 255, 1);
          border: 1px solid rgba(217, 217, 217, 1);
          font-size: 12px;
          font-weight: 700;
          line-height: 22px;
          color: rgba(26, 26, 26, 1);
          padding: 2px 4px;
          margin-right: 6px;
        }
        .value1 {
          border-radius: 2px;
          background: rgba(255, 141, 26, 0.1);
          padding: 4px 8px 4px 8px;
          font-size: 14px;
          font-weight: 400;
          color: rgba(255, 141, 26, 1);
        }
      }
      .timeline {
        margin: 16px;
        padding: 16px 0 0 0px;
        display: flex;
        justify-content: center;
        align-items: center;
        border-radius: 2px;
        width: 282px;
        background: rgba(242, 247, 255, 1);
      }
    }
  }
}
</style>
<style>
#mapcontainer {
  width: 100%;
  height: calc(100vh - 220px);
  position: relative;
}
.state-wrap {
  padding-bottom: 16px;
  position: absolute;
  left: 0;
  top: 0;
  font-size: 12px;
  line-height: 16px;
  /* background: url(img/map_label.png) no-repeat left bottom; */
  /* background: red; */
}
.logistics-wrap {
  /* background: #fff; */
  /* padding: 10px; */
  position: absolute;
  right: 0px;
  display: flex;
}
.logistics-state {
  padding-left: 25px;
  height: 25px;
  line-height: 25px;
  width: 65px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.logistics-time {
  width: 30px;
  padding: 4px 8px;
  padding-left: 25px;
  border-radius: 2px 0px, 0px, 2px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
/* .logistics-state,
.logistics-time {
  padding-left: 25px;
  height: 25px;
  line-height: 25px;
  width: 125px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
} */
.logistics-state {
  /* background: url(img/state_icon.png) no-repeat left center; */
  background: #fff;
}
.logistics-time {
  /* background: url(img/clock_icon.png) no-repeat left center; */
  background: rgba(0, 122, 255, 1);
  box-shadow: 0px 2px 4px 0px rgba(42, 130, 228, 0.15);
  color: rgba(255, 255, 255, 1);
}
</style>

效果如下:
在这里插入图片描述
参考文章:
https://www.jianshu.com/p/10a5581a8db1?winzoom=1

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

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

相关文章

CA(证书颁发机构)

CA 根证书路径/csk-rootca/csk-ca.pem&#xff1b; ~ 签发数字证书&#xff0c;颁发者信息&#xff1a;(仅包含如下信息) C CN ST China L BeiJing O skills OU Operations Departments CN CSK Global Root CA 1.修改证书的路径以及相关配置 vi /etc/pki/tls/op…

el-upload文件上传组件的封装

样式1 样式2 上传的格式 // annexUrl 数据格式如下[{"uid": 1682329534561,"name": "2023/04/24/273f36b860a74e79be3faed3ce20236f.pdf","suffix": ".pdf","url": "http://192.168.0.254:19000/annex/2023/…

JVM系列(十) 垃圾收集器之 Parallel Scavenge/Old

上篇文章我们讲解了单线程垃圾收集器 Serial/SerialOld &#xff0c;与之相对应的多线程垃圾收集器就是 Parallel Scavenge/Old&#xff0c; 本文我们讲解下多线程垃圾收集器 Parallel Scavenge/Old 垃圾收集器 新生代收集器&#xff1a; Serial、ParNew、Parallel Scavenge&…

数据库 | 什么是视图?怎么使用?什么是索引?

目录 一、视图 1 、视图概念 2、为什么要使用视图 3 、性能问题 4 、定义视图 5、查看视图 6、删除视图 二、索引 1、引入索引的问题 2、索引是什么 3、索引为什么选择b树 一、视图 1 、视图概念 视图&#xff08;View&#xff09;是一种虚拟存在的表&#xff0c;对…

【DRF配置管理】如何建立完善的DRF自带接口docs文档

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 DRF应用和管理 【DRF配置管理】Django使用DRF框架 【DRF配置管理】如何实现JWT认证 【DRF配置管理】如何在视图函数配置参数(一) 【DRF配置管理】如何…

okcc呼叫问题的解决方法(建议收藏)

很多客户开始使用OKCC呼叫中心系统&#xff0c;运营经常遇到的问题是呼叫打不通&#xff0c;无话单&#xff0c;呼叫秒挂&#xff0c;语音提示"您没有使用业务的权限"等等异常情况&#xff0c;而且反馈线路正常&#xff0c;使用呼叫系统拨打就是呼不通。 OKCC系统…

史上最烂 spring aop 原理分析

盗引中篇spring aop spring aop: jdk 动态代理和 cglib 动态代理的特点、区别、使用方式、原理及各自对反射的优化、二者在 spring 中的统一、通知顺序、从 Aspect 到 Advisior、静态通知调用、动态通知调用。 版本 jdk&#xff1a;8spring&#xff1a;5.3.20spring boot&…

华为OD机试(20222023)真题目录 + 考点 + 复盘思路

大家好&#xff0c;我是哪吒。 本专栏包含了最新最全的华为OD机试真题&#xff0c;有详细的分析和Java代码解答。已帮助1000同学顺利通过OD机考&#xff0c;发现新题目&#xff0c;随时更新。 以下为华为OD机试真题题库。 1、华为OD机试真题&#xff08;Java&#xff09;&am…

创建型模式-原型模式

原型模式 介绍 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。具体原型类&#xff1a;实现抽象原型类的 cl…

Linux文本处理三大利器Grep、AWK、Sed

写在前面 Linux三剑客是文本处理工具&#xff0c;它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。 Linux 三剑客主要作用: grep&#xff0c;它可以根据正则表达式查找相关内容并打印对应的数据。awk&#xff0c;它可以根…

redhat8配置vsftpd服务

目录 一、匿名访问模式 1.1、ftp服务器端修改配置&#xff08;配置文件&#xff1a;/etc/vsftpd/vsftpd.conf&#xff09; 1.2 修改ftp目录的权限 1.3 设置selinux服务对ftp服务的访问规则策略为允许 1.4 防火墙添加ftp服务 1.5 测试 二、本地用户模式 2.1 服务端修改配…

6、什么是类型断言?

虽然 TypeScript 很强大&#xff0c;但有时还不如我们了解一个值的类型方便&#xff0c;这时候我们更希望 TypeScript 不要帮我们进行类型检查&#xff0c;而是交给我们自己来&#xff0c;所以就用到了类型断言。类型断言有点像是一种类型转换&#xff0c;它把某个值强行指定为…

Vue收集表单数据学习笔记

收集表单数据 v-model双向数据绑定&#xff0c;收集的是input框的value&#xff0c;单选按钮不存在value&#xff0c;就像代码中的男女选项&#xff0c;即使绑定性别v-model“sex”&#xff0c;控制台依然不能接收性别的值&#xff0c;因为没有value值&#xff0c;&#xff0c…

python 第二章——数据类型详解

文章目录 前言一、什么是数据类型1.变量2.注释 二、数字三、字符串四、布尔五、列表六、元组七、集合八、字典总结 前言 本系列教程目录&#xff0c;可点击这里查看&#xff1a;Python教程目录 学习一门编程语言&#xff0c;第一件事就应该是熟练掌握这门编程语言的基本数据类…

[Java]JavaWeb开发中的MVC设计模式

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet&#xff0c;如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性&#xff0c;对于一个小型的网站这样的编写没有任何问题&#xff0c;但是一但…

MCDF代码详解,mcdf_rgm_pkg.sv代码超详细注释

寄存器模块代码详解 好戏开始: `include "param_def.v" package mcdf_rgm_pkg; import uvm_pkg::*; `include "uvm_macros.svh" import reg_pkg::*; //具有uvm_reg类型的专用寄存器描述[write-red-reg] class ctrl_reg extends uvm_r…

机器人教学中游戏化课程案例尝试

本文内容严格按创作模板发布&#xff1a; 2023年LPL春季赛季后赛正在火热进行中&#xff0c;你们心中的总冠军是哪支队伍呢&#xff1f;作为热爱游戏的程序猿&#xff0c;一起来聊聊你那些有意义的游戏开发经历吧&#xff01; 游戏化ROS机器人课程的优势有以下七点&#xff1a…

第3章-运行时数据区

此章把运行时数据区里比较少的地方讲一下。虚拟机栈&#xff0c;堆&#xff0c;方法区这些地方后续再讲。 转载https://gitee.com/youthlql/JavaYouth/tree/main/docs/JVM。 运行时数据区概述及线程 前言 本节主要讲的是运行时数据区&#xff0c;也就是下图这部分&#xff0c…

5.微服务项目实战---Gateway--服务网关,实现统一认证、鉴权、监控、路由转发等

5.1 网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。 这样的架构&#xff0…

用友联合7家信创生态伙伴成立“信创领先实践联盟”,助力企业数智化国产替代

数字经济背景下&#xff0c;面对国际局势不稳定等以切不确定因素&#xff0c;只有突破和掌握关键核心技术&#xff0c;打造生态话语权&#xff0c;掌握产业发展主动权&#xff0c;向产业价值链高端迈进&#xff0c;我国才能摆脱受制于人局面。而推动信创产业繁荣发展&#xff0…