vue中百度地图组件,点聚合

vue项目中,安装百度地图组件后(在我的上一篇文章已介绍vue安装百度地图依赖包,以及使用(模块化引入百度地图)),但如何对点位进行聚合呢?
首先,我们可以看百度地图组件官网:注意红框框选(后面讲到官网这个bugger)
在这里插入图片描述
根据官网介绍,我们可以进行全局和局部注册,进而引入点聚合。
局部注册:我们就可以按照官网介绍,首先引入包,然后进行注册:

import {BmlMarkerClusterer} from 'vue-baidu-map'
export default {
  components: {
    BmlMarkerClusterer
  }
}

全局注册:我们就可以按照官网介绍,在vue项目目录src文件下,配置main.js:

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'
import {BmlMarkerClusterer} from 'vue-baidu-map'
Vue.component('bml-marker-clusterer', BmlMarkerClusterer)

重点来了,注意了,百度组件官网注册的聚合标签为bml-marker-cluster,而在聚合所使用的标签为bml-marker-clusterer(和上述我所框选的红框对比)
在这里插入图片描述
所以我们自己在进行引入聚合时,一定要将注册的标签保持一致(反之,找bugger很痛苦),直接上代码(我这里使用的为全局注册):

<template>
    <baidu-map class="map"
        :center="{lng:121.477937,lat:31.23507}"
        :zoom='13'
        :scroll-wheel-zoom='true'
    >
    <bm-scale anchor="BMAP_ANCHOR_BOTTOM_LEFT"></bm-scale>
    <bm-marker @click="infoWindowOpen" :position="{lng:121.477937,lat:31.23507}" :dragging="true" animation='BMAP_ANIMATION_BOUNCE'>
         <bm-label content='上海市市民之家' :labelStyle="{color:'red',fontSize:'12px'}" :offset="{width:-35,height:30}" />    
    </bm-marker>
    <bm-overview-map anchor="BMAP_ANCHOR_BOTTOM_RIGHT" :isOpen='true'></bm-overview-map>
    <bml-marker-clusterer :averageCenter="true">
        <bm-marker @click="infoWindowOpen2" v-for="(marker,index) in markers" :key="index" :position="{lng:marker.longitude,lat:marker.latitude}">
        </bm-marker>
   </bml-marker-clusterer>
  </baidu-map>
</template>
<script>
 export default {
       name:'map',
       data(){
           return {              
                markers:[],
                show: true
           }
       },
       created(){
       },
       components:{
        //   BmlMarkerClusterer
       },
       mounted(){
         this.request();
       },
       methods:{
           // 加载页面即进入摄像机列表请求
			request() {
				const me = this;
				me.markers = [];
				this.axios.post("我自己调试的接口")	//获取点位的接口
					.then(function (response) {			
						if (response.data.code == 0) {                                        
							const msg = response.data.msg;
                            me.markers = msg;
						}
					})
					.catch(function (error) {
						console.log(error);
					})
            }
       }

   }

得到的结果为:
在这里插入图片描述
为了进一步展示每个marker点的详细信息,通过官网介绍,我们可以使用bm-info-window标签进行添加(这里我就不详细介绍了,自己去官网查询),但是当我们对点位进行聚合后,却不能显示对应点位的信息,上代码对比:

<template>
    <baidu-map class="map"
        :center="{lng:121.477937,lat:31.23507}"
        :zoom='13'
        :scroll-wheel-zoom='true'
    >
    <bm-scale anchor="BMAP_ANCHOR_BOTTOM_LEFT"></bm-scale>
    <bm-marker @click="infoWindowOpen" :position="{lng:121.477937,lat:31.23507}" :dragging="true" animation='BMAP_ANIMATION_BOUNCE'>
         <bm-info-window :show="show" @close="infoWindowClose" @click="infoWindowOpen">上海市市民之家</bm-info-window>
         <!-- <bm-label content='上海市市民之家' :labelStyle="{color:'red',fontSize:'12px'}" :offset="{width:-35,height:30}" />     -->
    </bm-marker>
    <bm-overview-map anchor="BMAP_ANCHOR_BOTTOM_RIGHT" :isOpen='true'></bm-overview-map>
    <bml-marker-clusterer :averageCenter="true">
        <bm-marker @click="infoWindowOpen2" v-for="(marker,index) in markers" :key="index" :position="{lng:marker.longitude,lat:marker.latitude}">
        <bm-info-window :show="show" @close="infoWindowClose" @click="infoWindowOpen">上海市市民之家</bm-info-window>
        </bm-marker>
   </bml-marker-clusterer>
  </baidu-map>
</template>
<script>
 export default {
       name:'map',
       data(){
           return {
                markers:[],
                show: true
           }
       },
       mounted(){
         this.request();
       },
       methods:{
           infoWindowClose () {
             this.show = false
            },
            infoWindowOpen () {
            this.show = true
            },
           // 加载页面即进入摄像机列表请求
			request() {
				const me = this;
				me.markers = [];
				this.axios.post("我自己调试的接口")	//获取点位的接口
					.then(function (response) {			
						if (response.data.code == 0) {                                        
							const msg = response.data.msg;
                            me.markers = msg;
						}
					})
					.catch(function (error) {
						console.log(error);
					})
            }
       }
   }

对应的结果如下:
在这里插入图片描述
上述问题待解决。

百度组件官网:https://dafrok.github.io/vue-baidu-map/#/zh/index

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
要在Vue中实现百度地图聚合,可以按照以下步骤进行操作: 1. 首先,在Vue项目中安装百度地图的JavaScript API。可以通过在`index.html`文件中添加以下代码来引入百度地图的API: ```html <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=YOUR_API_KEY"></script> ``` 确保替换`YOUR_API_KEY`为你自己的百度地图API密钥。 2. 在Vue组件中创建地图容器,并初始化地图。可以在`mounted`钩子函数中添加以下代码: ```javascript mounted() { const map = new BMap.Map("map-container"); // 创建地图实例 const point = new BMap.Point(经度, 纬度); // 设置地图中心点坐标 map.centerAndZoom(point, 15); // 初始化地图,设置地图缩放级别 this.map = map; // 将地图实例保存到组件数据中 } ``` 确保替换`经度`和`纬度`为你希望地图显示的中心点坐标。 3. 获取需要聚合的标记点数据,并使用百度地图的`MarkerClusterer`类进行点聚合。可以在`mounted`钩子函数中添加以下代码: ```javascript mounted() { // ... const markers = []; // 存储标记点的数组 // 添加标记点到地图和markers数组中 yourData.forEach((item) => { const point = new BMap.Point(item.lng, item.lat); const marker = new BMap.Marker(point); map.addOverlay(marker); markers.push(marker); }); // 创建点聚合器并设置参数 const markerClusterer = new BMapLib.MarkerClusterer(map, { markers: markers, }); // ... } ``` 确保替换`yourData`为你的标记点数据数组,每个标记点的经度和纬度分别存储在`item.lng`和`item.lat`中。 4. 在Vue组件中添加地图容器的HTML代码。可以在组件模板中添加以下代码: ```html <template> <div id="map-container" style="width: 100%; height: 400px;"></div> </template> ``` 确保根据需要设置地图容器的宽度和高度。 通过以上步骤,你就可以在Vue项目中实现百度地图的点聚合效果了。记得在百度地图开放平台申请并获取到API密钥,并替换代码中的`YOUR_API_KEY`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值