T_T无辜的程序
T_T无辜的程序
  • 发布:2022-03-11 18:28
  • 更新:2023-08-15 09:36
  • 阅读:1655

map的自定义点聚合簇效果到底该咋实现,初始化配置项initMarkerCluster里面有啥配置项

分类:uni-app
map

map的自定义点聚合簇效果到底该咋实现,初始化配置项initMarkerCluster里面有啥配置项

2022-03-11 18:28 负责人:无 分享
已邀请:
DCloud_uniAD_HDX

DCloud_uniAD_HDX

后续补充文档对参数的说明
属性 类型 默认值 必填 说明
enableDefaultStyle boolean true 否 启用默认的聚合样式
zoomOnClick boolean true 否 点击已经聚合的标记点时是否实现聚合分离
gridSize boolean 60 否 聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,以像素为单位
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)
参考文档 https://uniapp.dcloud.net.cn/api/location/map.html

<template>  
  <view class="content">  
    <map id="map" class="map" :show-location="true" :latitude="latitude" :longitude="longitude"></map>  
  </view>  
</template>  

<script>  
  const img = '/static/logo.png';  

  export default {  
    data() {  
      return {  
        latitude: 23.099994,  
        longitude: 113.324520,  
      }  
    },  
    onReady() {  
      this._mapContext = uni.createMapContext("map", this);  

      // 仅调用初始化,才会触发 on.("markerClusterCreate", (e) => {})  
      this._mapContext.initMarkerCluster({  
        enableDefaultStyle: false,  
        zoomOnClick: true,  
        gridSize: 60,  
        complete(res) {  
          console.log('initMarkerCluster', res)  
        }  
      });  

      this._mapContext.on("markerClusterCreate", (e) => {  
        console.log("markerClusterCreate", e);  
      });  

      this.addMarkers();  
    },  
    methods: {  

      addMarkers() {  
        const marker = {  
          id: 1,  
          iconPath: img,  
          width: 50,  
          height: 50,  
          joinCluster: true, // 指定了该参数才会参与聚合  
          label: {  
            width: 50,  
            height: 30,  
            borderWidth: 1,  
            borderRadius: 10,  
            bgColor: '#ffffff'  
          }  
        };  

        const positions = [{  
          latitude: 23.099994,  
          longitude: 113.324520,  
        }, {  
          latitude: 23.099994,  
          longitude: 113.322520,  
        }, {  
          latitude: 23.099994,  
          longitude: 113.326520,  
        }, {  
          latitude: 23.096994,  
          longitude: 113.329520,  
        }]  

        const markers = []  

        positions.forEach((p, i) => {  
          const newMarker = Object.assign(marker, p)  
          newMarker.id = i + 1  
          newMarker.label.content = `label ${i + 1}`  
          markers.push(newMarker)  

          this._mapContext.addMarkers({  
            markers,  
            clear: false,  
            complete(res) {  
              console.log('addMarkers', res)  
            }  
          })  
        })  
      }  
    }  
  }  
</script>  

<style>  
  .content {  
    flex: 1;  
  }  

  .map {  
    flex: 1;  
  }  
</style>
  • T_T无辜的程序 (作者)

    谢谢回答,还有一个问题一直在困扰,我把enableDefaultStyle设置为false,该怎么去自定义样式,设置为true,它就是一个蓝底的圈吗

    2022-03-14 09:30

  • T_T无辜的程序 (作者)

    如果想自定义聚合样式,该如何操作

    2022-03-14 09:33

  • T_T无辜的程序 (作者)

    目前聚合已经实现,只是样式问题一直未解决

    2022-03-14 09:34

FullStack

FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866

DCloud_iOS_XHY

DCloud_iOS_XHY

首先需要理解一点聚合簇也是marker的一种,他的样式是通过 lable 实现的,自定义聚合样式方法:

  1. enableDefaultStyle 设置为 false
  2. 在 markerClusterCreate 事件中会返回聚合簇marker的集合,然后修改聚合簇marker 的 label 参数自定义样式
  3. 在调用 addMarkers 方法,添加修改后的聚合簇marker;

具体逻辑可以参考微信小程序给的示例工程,uniapp 中逻辑和微信小程序中的一样

奥利奥饼干

奥利奥饼干

使用mapcontext创建标记的时候
先创建100个聚合标记
再创建10个非聚合标记
当100个聚合标记触发聚合的时候
10个非聚合标记也会被影响成聚合状态, 并且100个聚合标记取消聚合时, 10个非聚合标记也无法恢复非聚合状态
要怎么处理?

要回复问题请先登录注册