百度地图API根据经纬度绘制轨迹图(Vue附源码)

有用可以点个关注,收藏!!

vue版本百度地图官方组件:https://dafrok.github.io/vue-baidu-map/#/zh/start/usage
这里不是使用的这种办法,个人感觉不是很完整,需要的自己研究下。
在这里插入图片描述
在这里插入图片描述

导入百度地图

importBaiduMap () {
  var script = document.createElement('script');
  script.src = 'https://api.map.baidu.com/api?v=2.0&ak=MzjWwp5rZDjfjo9sM2EqgTCoOIVxOI03&setLang=en&callback=loadBaiduMap';
  document.body.appendChild(script);
  //完全载入后执行
  window.loadBaiduMap = () => {
    window.baiduMap = new BMap.Map('rightBox'); //找到页面id 绘制地图
    window.baiduMap.addControl(new BMap.NavigationControl());
    window.baiduMap.centerAndZoom(new BMap.Point(70.0225, 40.027222), 3); //设置默认中心点
    window.baiduMap.enableScrollWheelZoom(); //允许滚轮缩放
    this.drawBaiduMap(); //绘制点
  };
},

绘制轨迹

    //绘制点
    drawBaiduMap () {
      let trainIcon = 'https://www.aliboxx.com/uploadfile/static/icons/train.png';
      if (this.list.length > 0) {
        window.baiduMap.centerAndZoom(new BMap.Point(this.list[0].lng, this.list[0].lat), 6);  //取第一个点为地图中心点
        //画路线部分
        let pointsArray = [];
        const list = this.list;
        list.forEach(item => {
          console.log(item, 'item')
          pointsArray.push(new BMap.Point(item.lng, item.lat)); //添加每一个点
        });
        let polyline = new BMap.Polyline(pointsArray, {
          strokeColor: '#5352ed',    //轨迹的样式
          strokeWeight: 3,
          strokeOpacity: 1.0,
        });
        window.baiduMap.addOverlay(polyline);

        //标注起点窗口信息
        let opts = {
          width: 100, // 信息窗口宽度
          // height: 60,     // 信息窗口高度
        };
        let contentString = `<div>第一个位置鼠标移动上去的信息</div>`;
        let infoWindow = new BMap.InfoWindow(contentString, opts); // 创建信息窗口对象
        let nowPoint = new BMap.Point(list[0].lng, list[0].lat);  //设置图标的位置
        let nowIcon = new BMap.Icon(trainIcon, new BMap.Size(32, 32));
        nowIcon.setImageSize(new BMap.Size(25, 25)); //设置图标大小
        let nowPort = new BMap.Marker(nowPoint, { icon: nowIcon });

        nowPort.addEventListener('mouseover', function () { //鼠标移动上去事件
          window.baiduMap.openInfoWindow(infoWindow, nowPoint);
        });
        nowPort.addEventListener('mouseout', function () { //移开清除
          window.baiduMap.closeInfoWindow(infoWindow, nowPoint);
        });
        window.baiduMap.addOverlay(nowPort);
      }
    },

左侧点击事件添加窗口

    clickInfo (row) {
      console.log(row, 'row')
      if (window.baiduMap) {//如果当前渲染的是百度地图
        let opts = {
          width: 250, // 信息窗口宽度
          // height: 100,     // 信息窗口高度
        };
        let contentString = `<div><p>点${row.lng},${row.lat}</p></div>`;
        let infoWindow = new BMap.InfoWindow(contentString, opts); // 创建信息窗口对象
        window.baiduMap.openInfoWindow(infoWindow, new BMap.Point(row.lng, row.lat)); // 打开信息窗口
      }
    }

页面完整代码

<template>
  <div class="page">
    <el-row type="flex" justify="center">
      <el-col :span="6">
        <el-input v-model="gpsNum" placeholder="请输入内容" size="small"></el-input>
      </el-col>
      <el-col :span="1">
        <el-button icon="el-icon-search" type="primary" size="small" style="margin:0 15px" @click="getList()">搜索
        </el-button>
      </el-col>
    </el-row>
    <el-row type="flex" class="mapBox" justify="center" :gutter="20">
      <el-col :span="8">
        <div class="leftBox">
          <el-table :data="list" style="width: 100%" @row-click="clickInfo">
            <el-table-column type="index" label="序号" width="50" align="center">
            </el-table-column>
            <el-table-column label="经纬度" align="center">
              <template slot-scope="scope">
                {{scope.row.lng}},{{scope.row.lat}}
              </template>
            </el-table-column>
          </el-table>
        </div>
      </el-col>
      <el-col :span="16">
        <div id="rightBox" class="rightBox"></div>
      </el-col>
    </el-row>
  </div>
</template>
 
<script>
export default {
  name: "demo",
  data () {
    return {
      gpsNum: '',
      list: [],
    }
  },
  created () {
    this.getList()
  },
  methods: {
    getList () {
      //创建虚拟数据
      for (let i = 0; i < 50; i++) {
        this.list.push({
          lng: i + Math.round(Math.random()) + 5,
          lat: 10 + i
        })
      }
      this.importBaiduMap()   //引入百度地图(如果是异步获取数据的话 要先拿到数据在初始化 地图api)
    },
    importBaiduMap () {
      var script = document.createElement('script');
      script.src = 'https://api.map.baidu.com/api?v=2.0&ak=MzjWwp5rZDjfjo9sM2EqgTCoOIVxOI03&setLang=en&callback=loadBaiduMap';
      document.body.appendChild(script);
      //完全载入后执行
      window.loadBaiduMap = () => {
        window.baiduMap = new BMap.Map('rightBox'); //找到页面id 绘制地图
        window.baiduMap.addControl(new BMap.NavigationControl());
        window.baiduMap.centerAndZoom(new BMap.Point(70.0225, 40.027222), 3); //设置默认中心点
        window.baiduMap.enableScrollWheelZoom(); //允许滚轮缩放
        this.drawBaiduMap(); //绘制点
      };

    },

    //绘制点
    drawBaiduMap () {
      let trainIcon = 'https://www.aliboxx.com/uploadfile/static/icons/train.png';
      if (this.list.length > 0) {
        window.baiduMap.centerAndZoom(new BMap.Point(this.list[0].lng, this.list[0].lat), 6);  //取第一个点为地图中心点
        //画路线部分
        let pointsArray = [];
        const list = this.list;
        list.forEach(item => {
          console.log(item, 'item')
          pointsArray.push(new BMap.Point(item.lng, item.lat)); //添加每一个点
        });
        let polyline = new BMap.Polyline(pointsArray, {
          strokeColor: '#5352ed',    //轨迹的样式
          strokeWeight: 3,
          strokeOpacity: 1.0,
        });
        window.baiduMap.addOverlay(polyline);

        //标注起点窗口信息
        let opts = {
          width: 100, // 信息窗口宽度
          // height: 60,     // 信息窗口高度
        };
        let contentString = `<div>第一个位置鼠标移动上去的信息</div>`;
        let infoWindow = new BMap.InfoWindow(contentString, opts); // 创建信息窗口对象
        let nowPoint = new BMap.Point(list[0].lng, list[0].lat);  //设置图标的位置
        let nowIcon = new BMap.Icon(trainIcon, new BMap.Size(32, 32));
        nowIcon.setImageSize(new BMap.Size(25, 25)); //设置图标大小
        let nowPort = new BMap.Marker(nowPoint, { icon: nowIcon });

        nowPort.addEventListener('mouseover', function () { //鼠标移动上去事件
          window.baiduMap.openInfoWindow(infoWindow, nowPoint);
        });
        nowPort.addEventListener('mouseout', function () { //移开清除
          window.baiduMap.closeInfoWindow(infoWindow, nowPoint);
        });
        window.baiduMap.addOverlay(nowPort);
      }
    },
    clickInfo (row) {
      console.log(row, 'row')
      if (window.baiduMap) {//如果当前渲染的是百度地图
        let opts = {
          width: 250, // 信息窗口宽度
          // height: 100,     // 信息窗口高度
        };
        let contentString = `<div><p>点${row.lng},${row.lat}</p></div>`;
        let infoWindow = new BMap.InfoWindow(contentString, opts); // 创建信息窗口对象
        window.baiduMap.openInfoWindow(infoWindow, new BMap.Point(row.lng, row.lat)); // 打开信息窗口
      }
    }
  }
}
</script>
 
<style lang="scss" scoped >
.page {
  background: #fafafa;
  //   height: 100vh;
  padding-top: 30px;
  .mapBox {
    width: 1600px;
    margin: 30px auto 0 auto !important;
    .leftBox {
      width: 100%;
      height: 600px;
      margin-right: 30px;
      background: #ffffff;
      overflow-y: scroll;
    }
    .rightBox {
      width: 100%;
      height: 600px;
    }
  }
}
</style>
  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codernmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值