Vue使用百度地图实现聚合的效果(vue-baidu-map)

Vue使用百度地图实现聚合的效果(vue-baidu-map)

  1. 安装插件:yarn add vue-baidu-map
  2. main.js中全局引入密钥(在百度开发者中心注册):
    import BaiduMap from 'vue-baidu-map'
    Vue.use(BaiduMap, {
      ak: 'your_app_key' // 百度地图秘钥
    })
    
  3. 代码实现:
<template>
	<baidu-map id="allmap" :zoom="mapZoom" :center="mapCenter" class="allmap"  :scroll-wheel-zoom="true">
    </baidu-map>
</template>
<script type="text/javascript">
	export default{
		data() {
			return {
				map: null,
		        mapCenter:{ lng: 121.508483, lat: 31.289045 },
		        mapZoom:13,
			},
		}
		mounted(){
		    this.getList()
		    this.initMap()
		},
		methods: {
			// 初始化地图
		    initMap() {
		        const that = this
		       // GL版命名空间为BMapGL  创建Map实例
		       that.map = new BMapGL.Map("allmap");
		       // 初始化地图,设置中心点坐标和地图级别
		       that.map.centerAndZoom(new BMapGL.Point(that.mapCenter.lng, that.mapCenter.lat), 5);  
		       //开启鼠标滚轮缩放
		       that.map.enableScrollWheelZoom(true);    
		       // 设置地图类型为地球模式 
		       that.map.setMapType(BMAP_EARTH_MAP); 
		       // 监听地图层级
		       that.map.addEventListener("zoomend", function(e) {
		          var ZoomNum = that.map.getZoom();
		          if (ZoomNum <= 6) {
		            that.getqingdanList(30)
		          } else if (ZoomNum > 6 && ZoomNum < 10) {
		            that.getList(50) // 设置像素聚合的距离阈值为 50 像素
		          } else {
		            that.getList(100) // 设置像素聚合的距离阈值为 50 像素
		          }
		      });
		    },
		    pixelCluster(markers, distance) {
		      // 先清除之前的详细点位信息
		      // if (this.map != null && this.map.getOverlays() != null && this.map.getOverlays().length > 0) {
		      //   this.map.clearOverlays()
		      // }
		      let clusters = []
		      for (let i = 0; i < markers.length; i++) {
		        let cluster = [markers[i]]
		        for (let j = i + 1; j < markers.length; j++) {
		          const pixel1 = this.map.pointToPixel(new BMapGL.Point(markers[i].lng, markers[i].lat))
		          const pixel2 = this.map.pointToPixel(new BMapGL.Point(markers[j].lng, markers[j].lat))
		          const pixelDistance = Math.sqrt(Math.pow(pixel1.x - pixel2.x, 2) + Math.pow(pixel1.y - pixel2.y, 2))
		          if (pixelDistance < distance) {
		            cluster.push(markers[j])
		            markers.splice(j, 1)
		            j--
		          }
		        }
		        clusters.push(cluster)
		      }
		      // 创建自定义图标,本地的图片
		      var myIcon = new BMapGL.Icon('src/assets/img/biaoqian.png', new BMapGL.Size(23, 25), {      
		          anchor: new BMapGL.Size(10, 25), 
		      });
		      // 在地图上显示聚合后的数据
		      clusters.forEach(cluster => {
		        const center = this.getClusterCenter(cluster)
		        // 获取对一个的qingdanId
		        const qingdanId = this.getClusterQingdanId(cluster)
		        const label = new BMapGL.Label(cluster.length, {offset: new BMapGL.Size(15, -30)})
		        //文本标注样式,transform为X轴平移,即文本居中显示
		        label.setStyle({
		            color: "#fff",
		            //backgroundColor: "rgba(0, 0, 0, 0.5)",
		            backgroundColor: "rgba(0, 0, 0, 0.3)",
		            borderRadius: "10px",
		            padding: "0 10px",
		            fontSize: "14px",
		            lineHeight: "20px",
		            border :"0",
		            transform:'translateX(-50%)'
		        });
		        const marker = new BMapGL.Marker(center, {icon: myIcon})
		        // 这里用于其它方法
		        marker.qingdanId = {
		            qingdanId: qingdanId
		        }
		        // 主要用于清除数据:根据id清除
		        marker.myId = "shouyetubiao";
		        marker.setLabel(label)
		        this.map.addOverlay(marker)
		      })
		    },
		    getClusterCenter(cluster) {
		      let totalLng = 0
		      let totalLat = 0
		      cluster.forEach(marker => {
		        totalLng += parseFloat(marker.lng)
		        totalLat += parseFloat(marker.lat)
		      })
		      const centerLng = totalLng / cluster.length
		      const centerLat = totalLat / cluster.length
		      return new BMapGL.Point(centerLng, centerLat)
		    },
		    getClusterQingdanId(cluster) {
		      let qingdanId = null;
		      cluster.forEach(marker => {
		        qingdanId = marker.qingdanId
		      })
		      return qingdanId
		    },
		    getqingdanList(xiangsu) {
		      // 根据名称移除指定覆盖物
		      if (this.map != null && this.map.getOverlays() != null && this.map.getOverlays().length > 0) {
		        this.removeOverlayById("shouyetubiao")
		      }
		       	this.$http({
		          url: this.$http.adornUrl('/qingdan/list'),
		          method: 'get',
		        }).then(({data}) => {
		          if (data.code === 0) {
		            this.qingdanList = data.qingdanList
		          }
		        })
			    this.pixelCluster(this.qingdanList, xiangsu)  
		    },
		    // 根据id删除覆盖物
		    removeOverlayById(id) {
		        var overlays = this.map.getOverlays();
		        overlays.forEach(overlay => {
		            if(overlay.myId === id) {
		                this.map.removeOverlay(overlay)
		            }
		        });
		    },
		} 
	}
</script>
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vue-baidu-map是基于百度地图API开发的Vue组件,它能够在Vue项目中轻松地集成百度地图。而离线百度地图是指在没有网络连接的情况下能够使用百度地图。 正常情况下,百度地图需要联网才能显示地图和获取相关数据。但是在有些场景下,比如地下车库或者偏远山区等网络较差或者没有网络的地方,就无法正常使用百度地图。离线百度地图就是解决这个问题的解决方案,它通过事先将地图数据下载保存在本地,使得在没有网络连接的情况下也能够正常使用百度地图。 对于vue-baidu-map来说,它的离线功能也是很重要的。通过使用vue-baidu-map的离线百度地图,开发者可以轻松地针对不同的场景选择不同的地图方案,提高用户的使用体验。而且离线百度地图对于一些隐私性、安全性要求高的应用场景也更加有优势。 总之,vue-baidu-map离线百度地图是一个非常实用与方便的工具,在实际生产中可以提供更好的用户体验,也为开发者提供了更多的选择与便捷。 ### 回答2: vue-baidu-map离线百度地图是一款基于Vue.js框架开发的百度地图组件库,主要解决的是在无网络或网络不稳定的情况下,无法使用在线地图的问题。该组件库提供的离线地图可以在无网络的情况下正常使用,并且具有与在线地图相同的功能和可视化效果。 在vue-baidu-map离线百度地图组件中,我们可以使用百度地图提供的基础地图、卫星地图、混合地图等多种地图样式,并且支持地名搜索、地图缩放、位置探测、路线规划等常用功能。此外,在使用vue-baidu-map离线百度地图时,我们也可以通过添加自定义数据层、自定义覆盖层等方式,对地图进行更加丰富的扩展和定制。 总之,vue-baidu-map离线百度地图是一款非常实用的地图组件库,它可以帮助我们在网络不稳定或者无网络的情况下,依然可以正常使用百度地图,并且具有完整的百度地图功能和美观的地图样式。如果你正在建设一个应用程序,需要集成离线地图功能,那么vue-baidu-map离线百度地图可能正是你需要的工具。 ### 回答3: vue-baidu-map是一个可嵌入Vue.js网站的地图组件,它集成了百度地图的API,可以让开发者轻松实现地图功能。 离线百度地图指的是一种不需要联网即可使用百度地图,也就是地图数据被下载到本地储存设备上。vue-baidu-map支持使用离线地图,这就意味着用户可以在没有网络的环境下依然能够使用地图功能。 使用vue-baidu-map离线百度地图的优势在于,它提供了更好的用户体验和更高的灵活性。首先,用户无需担心网络不稳定、信号弱的问题,可以随时随地使用地图进行定位、浏览、搜索等操作;其次,开发者可以根据具体需求选择下载特定区域的地图数据,以减少数据流量和缩短加载时间;还可以根据不同需求切换在线地图和离线地图,达到最佳的用户体验。 总之,vue-baidu-map离线百度地图为开发者提供了便捷灵活的地图开发工具,让用户可以更加自由地使用地图服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值