微信小程序实现轨迹回放

在微信小程序实现轨迹回放的效果

1、wxml

<map id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="16"
  bindcontroltap="controltap"  bindmarkertap="markertap" markers="{{markers}}" polyline="{{polyline}}"
  bindregionchange="regionchange" show-location style="width: 100%; height:{{height}}px;" ></map>

  <view class="padding flex flex-wrap justify-between align-center bg-white">
    <button  class='cu-btn bg-green shadow sm' bindtap='beginTrack'> 开始 </button>
    <button  class='cu-btn bg-orange shadow sm' bindtap='pauseTrack'> 暂停 </button>
    <button  class='cu-btn bg-red shadow sm' bindtap='endTrack'> 结束 </button>
  </view>

2、js

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    StatusBar: app.globalData.StatusBar,
    CustomBar: app.globalData.CustomBar,
    height: wx.getSystemInfoSync().windowHeight,
    latitude: 0,
    longitude: 0,
    playIndex: 0,   
    timer: null,
    markers: [],
    polyline: [],
    pointsInfo:[]
  },
  regionchange(e) {
    //console.log(e.type)
  },
  markertap(e) {
    //console.log(e.markerId)
  },
  controltap(e) {
    //console.log(e.controlId)
  },
  beginTrack:function(e){

  },
  onLoad: function (options){
    var that = this;
    wx.request({
      url: 'http://**/getTrack',
      data: {  
        beginTime:"开始时间",
        endTime:"结束时间"
      },
      method: "post",
      success: function (res) {
        that.setData({
          pointsInfo:res.data.pointsInfos,
          polyline: [{
            points: res.data.points,
            color: "#FF0000DD",
            width: 4,
            dottedLine: true
          }],
          markers: [{
            iconPath: '../../img/location.jpg',
            id: 0,
            latitude: res.data.points[0].latitude,
            longitude: res.data.points[0].longitude,
            width: 30,
            height: 30,
            title: that.data.brandNumber,
            callout: {
              content: that.data.brandNumber + ' \n 时间:' + res.data.pointsInfos[0].create_time + ' \n 速度:' + res.data.pointsInfos[0].speed + ' km/h',
              color: "#000000",
              fontSize: 13,
              borderRadius: 2,
              bgColor: "#fff",
              display: "ALWAYS",
              boxShadow: "5px 5px 10px #aaa"
            }
          }],
          latitude: res.data.points[0].latitude,
          longitude: res.data.points[0].longitude,
        })
      }
    })
  },
  /**
   * 开始
   */
  beginTrack:function(){
    var that = this;
    var i = that.data.playIndex == 0 ? 0 : that.data.playIndex;
    that.timer = setInterval(function () {
      i ++
      that.setData({
        playIndex: i,
        latitude: that.data.polyline[0].points[i].latitude,
        longitude: that.data.polyline[0].points[i].longitude,
        markers: [{
          iconPath: '../../img/car/e0.png',
          id: 0,
          latitude: that.data.polyline[0].points[i].latitude,
          longitude: that.data.polyline[0].points[i].longitude,
          width: 30,
          height: 30,
          title: that.data.brandNumber,
          callout: {
            content: that.data.brandNumber + ' \n 时间:' + that.data.pointsInfo[i].create_time + ' \n 速度:' + that.data.pointsInfo[i].speed + ' km/h',
            color: "#000000",
            fontSize: 13,
            borderRadius: 2,
            bgColor: "#fff",
            display: "ALWAYS",
            boxShadow: "5px 5px 10px #aaa"
          }
        }]
      }) 
      if ((i+1) >= that.data.polyline[0].points.length) { 
        that.endTrack();
      }
    }, 500) 
  }, 
  /**
   * 暂停
   */
  pauseTrack:function(){
    var that = this;  
    clearInterval(this.timer)
  },
  /**
   * 结束
   */
  endTrack:function(){
    var that = this; 
    that.setData({
      playIndex: 0,
      latitude: that.data.polyline[0].points[0].latitude,
      longitude: that.data.polyline[0].points[0].longitude,
      markers: [{
        iconPath: '../../img/car/e0.png',
        id: 0,
        latitude: that.data.polyline[0].points[0].latitude,
        longitude: that.data.polyline[0].points[0].longitude,
        width: 30,
        height: 30,
        title: that.data.brandNumber,
        callout: {
          content: that.data.brandNumber + ' \n 时间:' + that.data.pointsInfo[0].create_time + ' \n 速度:' + that.data.pointsInfo[0].speed + ' km/h',
          color: "#000000",
          fontSize: 13,
          borderRadius: 2,
          bgColor: "#fff",
          display: "ALWAYS",
          boxShadow: "5px 5px 10px #aaa"
        }
      }]
    }) 
    clearInterval(this.timer)
  }
})

后台数据使用的是百度鹰眼的数据。最终效果:

posted @ 2019-05-15 16:04  KitFung-P  阅读(10305)  评论(0编辑  收藏  举报