初识百度map

最近在做一个大屏相关的页面,其中有一块是地图展示,并且要求实现点击地图上面的点位弹出弹窗展示对应的内容,看完需求后的我就像在瓜猹里找不到瓜的猹,完全找不到方向下手,好在在看了几个小时的百度mapApi后,也是成功将需求实现了。下面附上实现过程以及核心代码。

1.首先要安装百度map并且在main.js引入并全局注册

 npm install vue-baidu-map --save
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
    
    
  // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
  ak: 'YOUR_APP_KEY'
})

2.组件内使用

直接上实例代码

<template>
  <div class="overview">
    <!--地图-->
    <div class="mapStyle">
      <baidu-map class="map" :center="center" :zoom="zoom" @ready="handler">
        <bml-marker-clusterer :averageCenter="true">
          <div v-for="(marker, i) of markers" :key="i">
            <bm-marker :dragging="false" :icon="{ url: marker.url, size: { width: 40, height: 40 } }"
              :position="{ lng: marker.lng, lat: marker.lat }" @click="infoWindowOpen(marker)">
              <bm-info-window v-if="marker.flag=='M站'" :position="{ lng: marker.lng, lat: marker.lat }"
                :show="marker.showFlag" @close="infoWindowClose(marker)">
                <p>m站名称 : {
    
    {
    
     marker.mzwxjgmc}}</p>
              </bm-info-window>
              <bm-info-window v-if="marker.flag=='I站'" :position="{ lng: marker.lng, lat: marker.lat }"
                :show="marker.showFlag" @close="infoWindowClose(marker)">
                <p>i站名称 : {
    
    {
    
     marker.izjcjgmc }}</p>
              </bm-info-window>
            </bm-marker>
          </div>
        </bml-marker-clusterer>
      </baidu-map>
    </div>
  </div>
</template>

<script>
  import {
    
    
    jgdwfb,
  } from '@api/screen'
  // 按需引入点聚合
  import {
    
    
    BmlMarkerClusterer
  } from 'vue-baidu-map';
  // 引入marker
  import BmMarker from 'vue-baidu-map/components/overlays/Marker';

  export default {
    
    
    //注册组件
    components: {
    
    
      BmlMarkerClusterer,
      BmMarker
    },
    data() {
    
    
      const markers = []; //声明一个空数组用来push
      return {
    
    
        show: false, //默认不展示
        center: {
    
     //经纬度
          lng: "",
          lat: ""
        },
        zoom: 13,//地图的视野
        markers,//地图轮廓的方法
        BMap: '',//地图轮廓的方法
        maps: [],//定义一个数组用来赋值接口的数据
      }
    },
    methods: {
    
    
      //地图方法
      handler({
    
    BMap,map}) {
    
    
        this.markers = [];//每次执行地图方法清空markers数组
        map.enableScrollWheelZoom(true) // 开启鼠标滚轮缩放
        let mapStyle = {
    
    
          style: "midnight"
        } //地图背景色
        map.setMapStyle(mapStyle);//生成地图背景色
        //请求接口
        jgdwfb({
    
    }).then(res => {
    
    
          this.$nextTick(() => {
    
    
            //赋值
            this.maps = res.data;
            this.zoom = 13;//地图的视野
            //循环拿到flag的值
            for (let i = 0; i < this.maps.length; i++) {
    
    
              // 判断flag的值渲染经纬度
              if (this.maps[i].flag == 'M站') {
    
    
                this.center.lat = res.data[i].wd;
                this.center.lng = res.data[i].jd;
                //赋值操作
                let position = {
    
    
                  lng: this.maps[i].jd,
                  lat: this.maps[i].wd,
                  url: require('../../assets/platform/dakou.png'),
                  showFlag: false,
                  mzwxjgmc: this.maps[i].mzwxjgmc,
                  flag: this.maps[i].flag,
                  pfjd: this.maps[i].pfjd,
                  jxlb: this.maps[i].jxlb,
                  lxdh: this.maps[i].lxdh,
                  gzztStr: this.maps[i].gzztStr,
                };
                this.markers.push(position); //添加到markers数组中
              }
              // 判断flag的值渲染经纬度
              if (this.maps[i].flag == 'I站') {
    
    
                //赋值操作
                this.center.lat = res.data[i].wd;
                this.center.lng = res.data[i].jd;
                let position = {
    
    
                  lng: this.maps[i].jd,
                  lat: this.maps[i].wd,
                  url: require('../../assets/platform/xiucheg.png'),
                  showFlag: false,
                  ssqx: this.maps[i].ssqx,
                  fzr: this.maps[i].fzr,
                  lxdh: this.maps[i].lxdh,
                  flag: this.maps[i].flag,
                  izjcjgmc: this.maps[i].izjcjgmc
                };
                this.markers.push(position); //添加到markers数组中
              }
            }
          })
        })
        //地图轮廓的一个方法
        this.BMap = BMap;
        this.map = map;
        map.centerAndZoom('黄山市', 10);
        let bdary = new BMap.Boundary();
        bdary.get('黄山市', function (res) {
    
    
          for (let i = 0; i < res.boundaries.length; i++) {
    
    
            var ply = new BMap.Polygon(res.boundaries[i], {
    
    
              strokeWeight: 4,
              strokeOpacity: 1,
              strokeStyle: 'line',
              strokeColor: '#ff0000'
            });
            map.addOverlay(ply);
            ply.setFillColor('none');
          }
        });
      },
    }
  }
</script>
<style scoped>
  .map {
    
    
    width: 600px;
    height: 500px;
  }
</style>

展示效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Shids_/article/details/121380724