vue中百度地图使用及自定义点聚合样式

百度地图使用及点聚合功能

由于后台固定了百度地图,百度地图和高德地图经纬度转换有次数限制,不能满足项目的正常运行,所以切换了百度地图,下面对使用中遇到的问题进行记录:

安装及使用百度地图:
  1. npm install vue-baidu-map --save

  2. 在main.js中引入

    import BaiduMap from 'vue-baidu-map'
    Vue.use(BaiduMap, {
      ak: ''// 在百度地图申请的key
    })
  1. 在界面中引用
     <baidu-map
      id="map"
      :center="center"
      :zoom="zoom"
      @ready="handler"
    />
  1. 在data中定义center和zoom,分别是地图的中心点和’层级深度’
 center: { lng: 0, lat: 0 }
 zoom: 3
  1. ready事件中可以取到 BMap类和map,从而对地图进行控制
    handler({ BMap, map }) {
      this.BMap = BMap
      this.map = map
      map.setMapStyleV2({
        styleId: ''//设置自定义样式
      })
      map.enableScrollWheelZoom() // 启用滚轮放大缩小,默认禁用
      map.enableContinuousZoom()// 可拖拽
      this.center.lng = 116.404
      this.center.lat = 39.915
      this.zoom = 15
    }
  • 修改地图的中心点和层级方法 this.map.centerAndZoom(new BMap.Point(lng, lat), zoom)
点聚合
创建点聚合实例
 this.pointSimplifierList = new BMapLib.MarkerClusterer(this.map, {
    markers: [],
    styles: [{
      url: require('../../assets/fullPage/distributed/12.png'),//点聚合图标背景图
      size: new BMap.Size(190, 36)//点聚合图标大小
    }]
  })
为点聚和填入点数据
drawClusterer(markerArr) {//markerArr是所有点的数组,其中包含了经纬度,点的图标,类型等
  const markarr = []
  for (let i = 0; i < markerArr.length; i++) {
    const point = new BMap.Point(markerArr[i].lng, markerArr[i].lat) // 循环生成新的地图点
    const icon = new BMap.Icon(markerArr[i].icon, new BMap.Size(48, 48))
    const marker = new BMap.Marker(point, { icon }) // 按照地图点坐标生成标记
    marker.info = markerArr[i]
    const that = this
    marker.addEventListener('click', function(e) {
      //这里可以做点击效果,如点击出现详情弹窗等
    })
    markarr.push(marker)
  }
  this.pointSimplifierList.addMarkers(markarr)
}
修改聚合点样式,增加聚合点其他触发效果
  • 在index.html中引入两个文件,这里我是把这两个文件放在和index.html同级了
    <script src="/TextIconOverlay.js"></script>
    <script src="/MarkerClusterer.js"></script>
  • 修改这两个文件
  1. MarkerClusterer.js中,找到原本带有的click事件,在下面照着写一个mouseover事件
 this._clusterMarker.addEventListener('mouseover', function(event) {
  // that._markers 这个是所有的点,在drawClusterer中给他塞了一个info字段,在这里遍历这个数组就能拿到这个点的info
  // 如触摸展示弹窗,我是手写了一段html放在liHtml中,样式可以写在地图的vue文件里
  // same_data这个div写在地图的vue里
  let liHtml = ''
  const div = document.getElementById('same_data')
  div.style.left = event.pixel.x + 'px'
  div.style.top = event.pixel.y + 'px'
  div.style.display = 'block'
  div.innerHTML = liHtml
 })
 // 和他对应的还会监听一个mouseout事件同理。
  1. TextIconOverlay.js中,修改的点聚合的样式,找到 _updateText 方法,对这段html进行修改,改为UI的样式,样式也是在写在vue中就可以;
  2. 这里的this._text默认只有聚合点的数量,如果要其他信息,可以在 MarkerClusterer.js中this._clusterMarker.setText 赋值的地方给修改一下
this._domElement.innerHTML = '<div class="amap-marker-content"><div class="info-name">' + this._text.name + '</div>' + '<div class="info-num">' + this._text.value + '</div><div>'
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用高德地图的聚合功能,首先需要安装并引入高德地图的JavaScript API。 1. 在`index.html`文件,添加如下代码引入高德地图的API: ```html <script src="https://webapi.amap.com/maps?v=1.4.15&key=your_api_key"></script> ``` 其,`your_api_key`是你在高德地图开放平台申请的API Key。 2. 在Vue组件,首先在`mounted`生命周期钩子初始化地图,并创建一个地图实例: ```javascript mounted() { // 初始化地图 AMap.initAMapApiLoader({ key: 'your_api_key', plugin: ['AMap.MarkerClusterer'] }); // 创建地图实例 this.map = new AMap.Map('mapContainer', { center: [lng, lat], // 地图经纬度 zoom: 13 // 地图缩放级别 }); } ``` 3. 在数据加载完成后,将需要聚合数据添加到地图上: ```javascript addMarkers() { this.points.forEach(point => { let marker = new AMap.Marker({ position: [point.lng, point.lat] // 标记位置经纬度 }); this.map.add(marker); }); } ``` 其,`this.points`是包含标记经纬度的数组。 4. 最后,启用聚合功能,将添加的标记进行聚合: ```javascript clusterMarkers() { let cluster = new AMap.MarkerClusterer(this.map, this.map.getAllOverlays(), { gridSize: 80, // 聚合的像素大小 renderCluserMarker(cluster) { let count = cluster.getMarkers().length; let div = document.createElement('div'); div.className = 'cluster-marker'; div.innerHTML = count; return new AMap.Icon({ size: new AMap.Size(40, 40), image: 'cluster.png', imageSize: new AMap.Size(40, 40), // 自定义聚合样式和内容 div: div }); } }); } ``` 通过`AMap.MarkerClusterer`类创建一个聚合器对象,将地图实例、添加的标记聚合选项传入。 以上就是在Vue使用高德地图聚合功能的基本步骤。根据实际需求,可以进一步添加交互、自定义样式等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值