公司要求在云平台上添加一个页面,调用百度地图,在上面标记相关地点,鼠标滑过是显示该地点的数据,点击标记跳转到详细数据浏览页面。一边做一边百度终于实现了(#.#)。

一、vue中引入百度地图接口

1.下载百度地图插件

npm install vue-baidu-map --save

2.在index.html中引入
 <script type="text/javascript"
        src="//api.map.baidu.com/api?v=2.0&ak=秘钥"></script>

秘钥自己申请或者百度一个都可

二、使用百度地图

1.创建一个div来放百度地图,一定要给div设置宽度和高度,才能显示出来。
 <div class="baidumap" id="allmap"></div>
2.定义baiduMap()方法创建地图实例,在mounted周期中调用。list是存在本地的数据,获取数据的方法在created周期中被调用。list中的数据包括id、name、longitude和lantitude,如果不需要从数据库中调用,可以在data中自己定义一个数组来存放这些数据。infoMessage为提示框中显示的消息,可以根据自己的需要进行修改。
mounted() {
    this.baiduMap();
  },
   baiduMap() {
      var map = new BMap.Map("allmap"); // 创建地图实例
      for (var i = 0; i < this.list.length; i++) {
        var point = new BMap.Point(
          this.list[i].longitude,
          this.list[i].latitude
        );
        var infoMessage =this.list[i].name;
        //如果要显示其他数据,加到infoMessage中
         infoMessage += "<br><br><div class='nodate'>无数据!</div>";
        //调用创建marker标记的方法,
        var marker = this.createMarker(
          point,
          infoMessage,
          this.list[i].number,
        );
        map.addOverlay(marker); //添加marker
        var fNameLabel = this.setLabelStyle(this.list[i].name);
        marker.setLabel(fNameLabel); // 添加百度label*/
      }
      var center = new BMap.Point(118.546015, 36.735546); //设置中心点坐标
      map.centerAndZoom(center, 8); //设置中心点和地图级别
      map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
      map.addControl(new BMap.NavigationControl());
      map.addControl(new BMap.ScaleControl());
      map.addControl(new BMap.OverviewMapControl());
      map.addControl(new BMap.MapTypeControl());
    },
3.创建marker标记和信息提示框的方法
//创建maeker和infowindow
    //传入的参数为:坐标,弹框中要显示的信息,厂区号
    createMarker(point, iw, paramNumber) {
      var markerx = new BMap.Marker(point);
      //鼠标停留发生的事件
      markerx.addEventListener("mouseover", function(e) {
        this.openInfoWindow(new BMap.InfoWindow(iw));
      });
      //鼠标划出发生的事件
      markerx.addEventListener("mouseout", function(e) {
        this.closeInfoWindow(new BMap.InfoWindow(iw));
      });
      //点击标记发生的事件
      var that = this;
      markerx.addEventListener("click", function(e) {
        that.$router.push({
          path: "点击之后要跳转的路径",
          query: {
            paramnumber: paramNumber
          }//给跳转页面传递的参数
        });
      });
      return markerx;
    },

三、总代码

<template>
  <div class="app-container">
    <div class="baidumap" id="allmap"></div>
  </div>
</template>

<script>
export default {
  name: "pm-distribution",
  components: {},
  data() {
    return {
      tokenPiece: this.$store.state.user.token.split(".")[1].slice(-34, -25),
      visible: null,
      paramNumber: null, //页面跳转传递的厂区号
      list: null,
      flag: true,
      listLoading:true,
      }
  },
  created() {
    this.fetchData();
  },
  mounted() {
    this.baiduMap();
  },
  methods: {
    fetchData() {
      this.listLoading = true;
      this.list = this.$store.state.user.factoryInfo;
      this.listLoading = false;
      for (var i = 0; i < this.list.length; i++) {
        this.factory = this.list[i].number;
       /*  this.queryGroup(); */
      }
    },
     baiduMap() {
      var map = new BMap.Map("allmap"); // 创建地图实例
      for (var i = 0; i < this.list.length; i++) {
        var point = new BMap.Point(
          this.list[i].longitude,
          this.list[i].latitude
        );
        var infoMessage =this.list[i].name;
        //如果要显示其他数据,加到infoMessage中
         infoMessage += "<br><br><div class='nodate'>无数据!</div><br><span class='reminder'>点击标记获取更多信息</span>";
        //调用创建marker标记的方法,
        var marker = this.createMarker(
          point,
          infoMessage,
          this.list[i].number,
        );
        map.addOverlay(marker); //添加marker
      }
      var center = new BMap.Point(118.546015, 36.735546); //设置中心点坐标
      map.centerAndZoom(center, 8); //设置中心点和地图级别
      map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
      map.addControl(new BMap.NavigationControl());
      map.addControl(new BMap.ScaleControl());
      map.addControl(new BMap.OverviewMapControl());
      map.addControl(new BMap.MapTypeControl());
    },
  //创建maeker和infowindow
    //传入的参数为:坐标,弹框中要显示的信息,厂区号
    createMarker(point, iw, paramNumber) {
      var markerx = new BMap.Marker(point);
      //鼠标停留发生的事件
      markerx.addEventListener("mouseover", function(e) {
        this.openInfoWindow(new BMap.InfoWindow(iw));
      });
      //鼠标划出发生的事件
      markerx.addEventListener("mouseout", function(e) {
        this.closeInfoWindow(new BMap.InfoWindow(iw));
      });
      //点击标记发生的事件
      var that = this;
      markerx.addEventListener("click", function(e) {
        that.$router.push({
          path: "点击之后要跳转的路径",
          query: {
            paramnumber: paramNumber
          }//给跳转页面传递的参数
        });
      });
      return markerx;
    },
  }
};
</script>
<style >
.baidumap {
  width: 100%;
  height: 650px;
}
/* 去除百度地图版权那行字 和 百度logo */
.baidumap > .BMap_cpyCtrl {
  display: none !important;
}
.baidumap > .anchorBL {
  display: none !important;
}
/* 弹出框中标题样式 */
.title {
  color: darkgreen;
  text-align: center;
  height: 10px;
}
/* 弹出框中提示“无数据”的样式 */
.nodate {
  color: dimgrey;
  text-align: center;
}
/* 弹出框底部的点击提示样式 */
.reminder {
  font-size: 12px;
  color: darkcyan;
  margin-left: 100px;
}
</style>

四、效果图

在这里插入图片描述

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐