百度地图轨迹显示

899 阅读2分钟

一:百度地图车辆轨迹显示,如下图:

1.直接上代码:其中that.lineData数据为经纬度总数据,如下:

[{lat: 40.03147874124063,lng: 116.35885991213647,currentDate:"车辆速度:" +"35" +"km/h" + "<br/>" + "车辆时间:" +"2020-11-24 00:00:58"},{lat: 40.03387244386362,lng: 116.35671079507857,currentDate:"车辆速度:" +"35" +"km/h" + "<br/>" + "车辆时间:" +"2020-11-24 00:00:58"},,,,,,,,]

渲染层代码:

<div id="map_canvas"></div>

逻辑代码如下:

    initMapHt(BMap, map) {
      var that = this;
      var map = new BMap.Map("map_canvas");
      map.enableScrollWheelZoom();
      var arrPois = [];
      arrPois = that.lineData.map(val => {
        var item = new BMap.Point(val.lng, val.lat);
        return item;
      });
      map.centerAndZoom(new BMap.Point(arrPois[0].lng, arrPois[0].lat), 13); // 根据经纬度显示地图的范围
      var lushu = "";
      // 实例化一个驾车导航用来生成路线
      var drv = new BMap.DrivingRoute("北京", {
        renderOptions: {
          //结果呈现设置
          map: map,
          autoViewport: false, //检索结束后自动调整地图视野
          enableDragging: false //起终点可进行拖拽
        },
        onSearchComplete: function(res) {
          if (drv.getStatus() == BMAP_STATUS_SUCCESS) {
            map.addOverlay(
              new BMap.Polyline(arrPois, {
                strokeColor: "#002C95",
                strokeWeight: 4
              })
            );
            map.setViewport(arrPois); // 根据提供的地理区域或坐标设置地图视野
            var aa = 2;
            lushu = new BMapLib.LuShu(map, arrPois, {
              defaultContent: "", //"从天安门到百度大厦"
              autoView: true, //是否开启自动视野调整,如果开启那么路书在运动过程中会根据视野自动调整
              icon: new BMap.Icon(gisRed, new BMap.Size(52, 26), {
                anchor: new BMap.Size(27, 13)
              }),
              speed: 9000,
              enableRotation: true, //是否设置marker随着道路的走向进行旋转
              landmarkPois: []
            });
          }
        }
      });
      //引用添加小圆点代码
      this.initPoint(map);
      var start = new BMap.Point(arrPois[0].lng, arrPois[0].lat);
      var end = new BMap.Point(
        arrPois.slice(-1)[0].lng,
        arrPois.slice(-1)[0].lat
      );
      drv.search(start, end);
      //绑定事件
      $("run").onclick = function() {
        lushu.start();
      };
      $("runjx").onclick = function() {
        lushu.start();
      };
      $("stop").onclick = function() {
        lushu.stop();
      };
      $("pause").onclick = function() {
        lushu.pause();
      };
      function $(element) {
        return document.getElementById(element);
      }
    }

添加小圆点代码如下,点击小圆点弹出内容,如下图

 initPoint(map) {
      // that.lineData
      var that = this;
      var icon = new BMap.Icon(btnIcon, new BMap.Size(10, 10), {
        anchor: new BMap.Size(5, 5)
      });
      icon.setImageSize(new BMap.Size(10, 10)); //设置图标大小
      var lineDatanumber = [];
      for (let i = 0; i < that.lineData.length; i++) {
        if (that.lineData.length > 3000) {
          if (i % 9 == 0) {
            lineDatanumber.push(that.lineData[i]);
          }
        } else if (that.lineData.length > 1000) {
          if (i % 5 == 0) {
            lineDatanumber.push(that.lineData[i]);
          }
        } else {
          if (i % 2 == 0) {
            lineDatanumber.push(that.lineData[i]);
          }
        }
      }
      lineDatanumber.forEach(val => {
        var point = new BMap.Point(val.lng, val.lat);
        var marker = new BMap.Marker(point, { icon: icon });
        marker.addEventListener("click", function() {
          var opts = {
            width: 260,
            height: 30,
            title: " "
          };
          var infoWindow = new BMap.InfoWindow(val.currentDate, opts);
          map.openInfoWindow(infoWindow, point); // 开启信息窗口
        });
        map.addOverlay(marker);
      });
    },