当前位置: 首页 > news >正文

微信小程序map组件聚合簇样式自定义

目标效果如下图

1、微信小程序原生语言开发

2、map组件聚合簇样式自定义

下面代码是我调研时候的调试数据,可做demo参考。

<mapid="myMap"style="width: 100%; height: 100vh;"latitude="40.22429"longitude="116.43639"scale="{{scale}}"
>
</map>
const app = getApp();
Page({data: {scale: 16,markers: []},onReady() {const _this = this;this.mapCtx = wx.createMapContext('myMap', this); // 绑定thisthis.mapCtx.initMarkerCluster({gridSize: 50,              // 必须:聚合网格大小(像素,控制marker距离多近会聚合)minClusterSize: 2,         // 必须:最小聚合数量(默认2,即≥2个marker才会聚合)maxZoom: 20,               // 必须:超过该缩放级别后不聚合enableDefaultStyle: false, // 禁用默认聚合样式,使用自定义clusterMarker: {iconPath: '/image/abc.png',  // 网络图标记得在 downloadFile 合法域名中width: 64,                   // 图片尺寸最好和实际图片一致height: 64,anchor: { x: 0.5, y: 0.5 },zIndex: 999,                 // 提高层级,确保在普通标记上方},success(res) {_this.addMarkersToMap()},fail(err) {}});},// 监听聚合创建事件,兜底处理自定义聚合样式markerClusterCreateFn(){const _this = this;this.mapCtx.on('markerClusterCreate', (res) => {const clusters = res.clusters;const clusterMarkers = clusters.map(cluster => {const { center, clusterId, markerIds } = cluster;const count = markerIds.length; // 聚合点数量// 1. 找到聚合簇中第一个点位的完整信息(通过markerId匹配)const firstMarker = _this.data.markers.find(marker => marker.id === markerIds[0]);// 2. 提取第一个点位的label.content,没有则用默认文本const firstContent = firstMarker?.label?.content || '多个点位';// 3. 拼接聚合簇标题:第一个内容+...等X个const calloutContent = `${firstContent}...等`;return {...center,clusterId, // 必须携带clusterId,确保聚合关联iconPath: '/image/abc.png',width: 64,height: 64,anchor: { x: 0.5, y: 0.5 },label: { // 聚合簇的自定义图标样式content: String(count), // 显示聚合数量color: '#900', // 文字颜色(白色更醒目)fontSize: 14, // 文字大小fontWeight: 'bold', // 文字加粗anchorX: 0.5, // 文字X轴锚点(居中)anchorY: 0.5, // 文字Y轴锚点(居中)bgColor: 'transparent', // 文字背景透明,避免遮挡图标padding: 2 // 文字内边距,优化显示},// callout 显示标题(聚合簇图标上方,可点击显示或常驻)callout: {content: calloutContent, // 自定义标题color: '#333',fontSize: 12,bgColor: '#fff', // 白色背景突出标题borderRadius: 4,padding: 4,display: 'ALWAYS', // 一直显示(可选 BYCLICK 点击显示)textAlign: 'center',anchorX: 0.5,anchorY: -1.2 // 标题在图标上方}};});// 添加自定义聚合标记if (clusterMarkers.length > 0) {this.mapCtx.addMarkers({markers: clusterMarkers,clear: false,success: () => {}});}});},addMarkersToMap(){const _this = this;// 标记点数组,方便调试的固定假数据const markersAll = [{ id: 20, latitude: 40.22429, longitude: 116.43639,iconPath: '/image/orderSel.png',label:{anchorX: 8,anchorY: -25,bgColor: "#fff",borderRadius: 30,color: "#F09834",content: "礼物手工",fontSize: 11,padding: 2,},width: 34, height: 48, joinCluster: true, anchor: { x: 0.5, y: 1 } },{ id: 21, latitude: 40.22429, longitude: 116.43629,iconPath: '/image/orderSel.png',label:{anchorX: 8,anchorY: -25,bgColor: "#fff",borderRadius: 30,color: "#F09834",content: "南山春日感官",fontSize: 11,padding: 2,},width: 34, height: 48, joinCluster: true, anchor: { x: 0.5, y: 1 } },{ id: 23, latitude: 40.22429, longitude: 116.43659,iconPath: '/image/orderSel.png',label:{anchorX: 8,anchorY: -25,bgColor: "#fff",borderRadius: 30,color: "#F09834",content: "木作师资课",fontSize: 11,padding: 2,},width: 34, height: 48, joinCluster: true, anchor: { x: 0.5, y: 1 } },]// 调用 addMarkers 添加this.mapCtx.addMarkers({markers: markersAll,clear: false,success: () => {console.log('标记添加成功');},fail: (err) => {console.error('标记添加失败', err);},complete: (e) => {console.log('标记添加成功或者失败都会触发', e);}})this.setData({markers: markersAll})_this.markerClusterCreateFn()}
})

http://www.dtcms.com/a/600792.html

相关文章:

  • 河北住房和城乡建设厅网站电话海报设计图片简单
  • 好的俄文网站设计大学学风建设专题网站
  • 领域驱动设计系列文章汇总
  • C++11拓展语法
  • 智慧医疗:FHIR R5、联邦学习与MLOps三位一体的AI产品化实战指南(下)
  • 创建一个达梦库需要多大空间
  • Redis_11_类型补充+命令补充+RESP
  • 网站设计哪家便宜seo网站做推广公司
  • 用于感知图像超分辨率的自编码监督(易于理解版本)
  • 地图可视化实践录:空间分析库Turf.js的学习
  • 长沙制作网站公司哪家好广州seo推广营销
  • 11、prometheus-PromQL-5-聚合计算函数
  • (114页PPT)上海x友集团管理咨询及IT规划项目第一期报告管理诊断分析咨询报告(附下载方式)
  • C语言编译器 Visual Studio:实现高效编程与调试环境优化
  • 王树森深度强化学习 DRL(六)连续控制 DDPG + 随机策略
  • 【SatWetCH4 第一期】全球湿地甲烷排放通量估算过程模型 SatWetCH4 介绍
  • Opencv(十一) : 图像缩放
  • 开源 Objective-C IOS 应用开发(四)Xcode工程文件结构
  • 儿童网站 源码html5网站开发教学
  • 编译类语言的特点与应用
  • Python 数组使用方法总结
  • 网站风格变化免费logo在线制作头像
  • 第三章深度解析:智能体“大脑”的底层逻辑——大语言模型技术基石全拆解
  • 100个云计算基础知识
  • 对比 DeepSeek(MLA)、Qwen 和 Llama 系列大模型在 Attention 架构/算法层面的核心设计及理解它们的本质区别。
  • 【C++】List容器模拟实现(超详细)
  • 湖南火电建设有限公司网站龙采哈尔滨建站公司
  • 【PHP反序列化】css夺旗赛
  • ServletLess架构简介
  • 安卓C语言编译器的选择与使用技巧 | 优化C语言编程体验,提升开发效率