2019百度地图离线地图制作

根据项目内网需求需要制作一个离线地图,因为外网访问不了在线地图api,因此这里使用了百度的离线地图,当时网上也找过,资源很少,需要改源文件,但很多是16年的帖子了,一改就错,因为百度更新了。。。

所以我知道这类资源是很少的,肯定会有很多人有这类需求但是不知道怎么做。

为了方便大家,因此这里分享一个demo,19年做的,成品已经交货了,这里就不贴出来了,剩个demo相当于最初的架子,也许你们更好搭一点

需要引入这些文件,如下图
在这里插入图片描述

其中bmap-offline是必需的配置文件,里面有个tiles是地图切片
index.html

<script type="text/javascript" src="./static/map_load.js"></script>
<script type="text/javascript" src="./static/AreaRestriction_min.js"></script>

组件:

import BMap from "BMap";
getMapCanvas() {
      var data = [
        {
          name: "小马",
          region_id: 1,
          online: 1,
          lng:"116.521264",
          lat: "40.567227",
          value: [116.521264, 40.567227],
          site_url: "xxxxxxxxx",
          car: 26
        },
        {
          name: "小马2",
          region_id: 2,
          online: 1,
          lng:"116.521264",
          lat: "40.567227",
          value: [116.521264, 40.567227],
          site_url: "xxxxxxxxx",
          car: 26
        },
        {
          name: "小马3",
          region_id: 3,
          online: 1,
          lng:"116.521264",
          lat: "40.567227",
          value: [116.521264, 40.567227],
          site_url: "xxxxxxxxx",
          car: 26
        }
      ];
      let myChart = this.$echarts.init(document.getElementById("myChart"));//初始化
      var arr = [];
      var geoCoordMap = {};
      var seriesArr = [];
      let colors = ["#38a3db", "#f13e3e", "#e28645"];//可以定义多个color
      for (let i = 0; i < data.length; i++) {//自定义对象
        var arr_obj = {
          name: data[i].name,
          region_id: data[i].region_id,
          online: data[i].online,
          value: [
            {
              name: "车辆",
              value: data[i].car
            }
          ]
        };
        arr.push(arr_obj);
        geoCoordMap[data[i].name] = data[i].value;
      }

      var convertData = function(arr) {//动态配置数据,对应信息的位置坐标
        var res = [];
        for (var i = 0; i < arr.length; i++) {
          var geoCoord = geoCoordMap[arr[i].name];
          if (geoCoord) {
            res.push({
              name: arr[i].name,
              region_id: arr[i].region_id,
              online: data[i].online,
              site_url: data[i].site_url,
              value: geoCoord.concat(arr[i].value)
            });
          }
        }
        return res;
      };
      for (let i = 1; i < 12; i++) {//symbolSize为圆点大小,这里根据value的大小动态规定圆点大小
        var con = convertData(arr)
        var seriesObj = {
          symbolSize: function(val) {
            if (val[2]) {
              if (val[2].value <= 500) {
                return 10;
              } else if (val[2].value > 500 && val[6].value <= 1000) {
                return 12;
              } else {
                return 14;
              }
            }
          },
          type: "scatter",
          coordinateSystem: "bmap",//定义bmap
          geoIndex: 0,
          label: {
            color: "#fff",
            show: false
          },
          data: con
        };
        seriesObj.name = i;
        seriesArr.push(seriesObj);//配置series对象
      }
      myChart.setOption({
        title: {
          text: "站点实时情况",
          left: "6%",
          top: "5%",
          textStyle: {
            color: "#666",
            fontSize: 18
          }
        },
        tooltip: {
          trigger: "item",
          formatter: function(params) {
            return (
              '<p class="el-icon-office-building" style="color:rgb(209, 209, 209);font-size:16px;font-weight:600;margin-bottom:10px;text-align:center;">' +
              "&nbsp;&nbsp;" +
              123 +
              "</p>"
            );
          }
        },
        bmap: {
          center: [this.lng, this.lat],//设置地图中心,处于canvas的中心点
          zoom: this.zoom,//缩放
          roam: true,//拉伸
          scaleLimit: { //缩放级别
            max: 10,
            min: 9
          }
        },
        color: colors,//颜色
        series: seriesArr//配置数据
      });
      var map = myChart
        .getModel()
        .getComponent("bmap")
        .getBMap();//初始化
      // map.centerAndZoom(new BMap.Point(116.521264, 40.567227), 9);//设置中心点
      // map.setCurrentCity("北京");//设置中心点名称
      map.enableScrollWheelZoom(true);//开启鼠标滚轮缩放
      // map.disableDragging();//是否禁止拖拽
      map.setMinZoom(9);//最小缩放级别
      map.setMaxZoom(13);//最大缩放级别
      map.addEventListener("zoomend", () => {//监听缩放
        this.zoom = map.getZoom();
      });

      map.addEventListener("mousemove", e => {//监听位移
        this.lng = e.point.lng;
        this.lat = e.point.lat;
      });
      var b = new BMap.Bounds(//设置地图范围(西北.东南)
        new BMap.Point(114.697919, 39.426638),
        new BMap.Point(118.413095, 41.444382)
      );
      try {//拖出范围后的报出异常
        BMapLib.AreaRestriction.setBounds(map, b);
      } catch (e) {
        this.$message({
          message: e,
          type: "error"
        });
      }
      // map.setMaxZoom({ zoom: 12 });
      // map.setMapStyleV2({//设置自定义样式,这里离线所以没有此api
      //   styleId: '6ee8ff46f537exxxxxxxxxxxxxxxxx'
      // });
      window.addEventListener("resize", function() {//监听重置canvas窗口
        myChart.resize();
      });
      var _this = this;
      myChart.on("click", function(params) {//当时做了一个点击站点跳转到对应的url
        if (params.data) {
          window.location.href = params.data.site_url;
        }
      });
    }

保存,刷新页面,f12看到打印
在这里插入图片描述
成功加载
在这里插入图片描述
ok!
所需文件我都发在博客里了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值