【愚公系列】2022年04月 微信小程序-地图的使用之点聚合


前言

地图基础属性:

属性类型默认值必填说明最低版本
longitudenumber中心经度1.0.0
latitudenumber中心纬度1.0.0
scalenumber16缩放级别,取值范围为3-201.0.0
min-scalenumber3最小缩放级别2.13.0
max-scalenumber20最大缩放级别2.13.0
markersArray. 标记点1.0.0
coversArray.即将移除,请使用 markers1.0.0
polylineArray. 路线1.0.0
circlesArray. 1.0.0
controlsArray.控件(即将废弃,建议使用 cover-view 代替)1.0.0
include-pointsArray.缩放视野以包含所有给定的坐标点1.0.0
show-locationbooleanfalse显示带有方向的当前定位点1.0.0
polygonsArray. 多边形2.3.0
subkeystring个性化地图使用的key2.3.0
layer-stylenumber1个性化地图配置的 style,不支持动态修改
rotatenumber0旋转角度,范围 0 ~ 360, 地图正北和设备 y 轴角度的夹角2.5.0
skewnumber0倾斜角度,范围 0 ~ 40 , 关于 z 轴的倾角2.5.0
enable-3Dbooleanfalse展示3D楼块2.3.0
show-compassbooleanfalse显示指南针2.3.0
show-scalebooleanfalse显示比例尺,工具暂不支持2.8.0
enable-overlookingbooleanfalse开启俯视2.3.0
enable-zoombooleantrue是否支持缩放2.3.0
enable-scrollbooleantrue是否支持拖动2.3.0
enable-rotatebooleanfalse是否支持旋转2.3.0
enable-satellitebooleanfalse是否开启卫星图2.7.0
enable-trafficbooleanfalse是否开启实时路况2.7.0
enable-poibooleantrue是否展示 POI 点2.14.0
enable-buildingboolean是否展示建筑物2.14.0
settingobject配置项2.8.2
bindtapeventhandle点击地图时触发,2.9.0起返回经纬度信息1.0.0
bindmarkertapeventhandle点击标记点时触发,e.detail = {markerId}1.0.0
bindlabeltapeventhandle点击label时触发,e.detail = {markerId}2.9.0
bindcontroltapeventhandle点击控件时触发,e.detail = {controlId}1.0.0
bindcallouttapeventhandle点击标记点对应的气泡时触发e.detail = {markerId}1.2.0
bindupdatedeventhandle在地图渲染更新完成时触发1.6.0
bindregionchangeeventhandle视野发生变化时触发,2.3.0
bindpoitapeventhandle点击地图poi点时触发,e.detail = {name, longitude, latitude}2.3.0
bindanchorpointtapeventhandle点击定位标时触发,e.detail = {longitude, latitude}2.13.0

marker

标记点用于在地图上显示标记的位置

属性说明类型必填备注最低版本
id标记点 idnumbermarker 点击事件回调会返回此 id。
clusterId聚合簇的 idNumber自定义点聚合簇效果时使用
joinCluster是否参与点聚合Boolean默认不参与点聚合
latitude纬度number浮点数,范围 -90 ~ 90
longitude经度number浮点数,范围 -180 ~ 180
title标注点名string点击时显示,callout 存在时将被忽略
zIndex显示层级number2.3.0
iconPath显示的图标string项目目录下的图片路径,支持网络路径、本地路径、代码包路径(2.3.0)
rotate旋转角度number顺时针旋转的角度,范围 0 ~ 360,默认为 0
alpha标注的透明度number默认 1,无透明,范围 0 ~ 1
width标注图标宽度number/string默认为图片实际宽度
height标注图标高度number/string默认为图片实际高度
callout标记点上方的气泡窗口Object支持的属性见下表,可识别换行符。1.2.0
customCallout自定义气泡窗口Object支持的属性见下表
label为标记点旁边增加标签Object支持的属性见下表,可识别换行符。1.2.0
anchor经纬度在标注图标的锚点,默认底边中点Object{x, y},x 表示横向(0-1),y 表示竖向(0-1)。{x: .5, y: 1} 表示底边中点1.2.0
aria-label无障碍访问,(属性)元素的额外描述string2.5.0

marker 上的气泡 callout

属性说明类型最低版本
content文本string1.2.0
color文本颜色string1.2.0
fontSize文字大小number1.2.0
borderRadius边框圆角number1.2.0
borderWidth边框宽度number2.3.0
borderColor边框颜色string2.3.0
bgColor背景色string1.2.0
padding文本边缘留白number1.2.0
display‘BYCLICK’:点击显示; ‘ALWAYS’:常显string1.2.0
textAlign文本对齐方式。有效值: left, right, centerstring1.6.0
anchorX横向偏移量,向右为正数number2.11.0
anchorY纵向偏移量,向下为正数number2.11.0

marker 上的自定义气泡 customCallout

customCallout 存在时将忽略 callout 与 title 属性。自定义气泡采用采用 cover-view 定制,灵活度更高。

属性说明类型最低版本
display‘BYCLICK’:点击显示; ‘ALWAYS’:常显string2.12.0
anchorX横向偏移量,向右为正数number2.12.0
anchorY纵向偏移量,向下为正数number2.12.0

marker 上的气泡 label

属性说明类型最低版本
content文本string1.2.0
color文本颜色string1.2.0
fontSize文字大小number1.2.0
xlabel的坐标(废弃)number1.2.0
ylabel的坐标(废弃)number1.2.0
anchorXlabel的坐标,原点是 marker 对应的经纬度number2.1.0
anchorYlabel的坐标,原点是 marker 对应的经纬度number2.1.0
borderWidth边框宽度number1.6.0
borderColor边框颜色string1.6.0
borderRadius边框圆角number1.6.0
bgColor背景色string1.6.0
padding文本边缘留白number1.6.0
textAlign文本对齐方式。有效值: left, right, centerstring1.6.0

一、点聚合

1.wxml

<map 
  id="mapId"
  class="map"
  latitude="{{latitude}}"
  longitude="{{longitude}}"
  bindmarkertap="onMarkerTap"
  bindcallouttap="onCalloutTap"
  bindlabeltap="onLabelTap"
></map>

<view class="btn-area service">
  <button bindtap="removeMarkers">
    移除参与聚合点的marker
  </button>
  <button bindtap="addMarkers">
    添加聚合点marker
  </button>
</view>

2.js

const app = getApp()
const img = '../image/location.png'

Page({
  data: {
    latitude: 23.099994,
    longitude: 113.324520,
  },
  onLoad: function () {
    this.mapCtx = wx.createMapContext('mapId')

    this.mapCtx.on('markerClusterClick', res =>{
      console.log('markerClusterClick', res)
    })

    // 使用默认聚合效果时可注释下一句
    this.bindEvent()
  },

  bindEvent() {
    this.mapCtx.initMarkerCluster({
      enableDefaultStyle: false,
      zoomOnClick: true,
      gridSize: 60,
      complete(res) {
        console.log('initMarkerCluster', res)
      }
    })

    // enableDefaultStyle 为 true 时不会触发改事件
    this.mapCtx.on('markerClusterCreate', res => {
      console.log('clusterCreate', res)
      const clusters = res.clusters
      const markers = clusters.map(cluster => {
        const {
          center,
          clusterId,
          markerIds
        } = cluster
        return  {
          ...center,
          width: 0,
          height: 0,
          clusterId, // 必须
          label: {
            content: markerIds.length + '',
            fontSize: 20,
            width: 60,
            height: 60,
            bgColor: '#00ff00',
            borderRadius: 30,
            textAlign: 'center',
            anchorX: 0,
            anchorY: -30,
          }
        }
      })
      this.mapCtx.addMarkers({
        markers,
        clear: false,
        complete(res) {
          console.log('clusterCreate addMarkers', res)
        }
      })
    })
    
  },

  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.mapCtx.addMarkers({
        markers,
        clear: false,
        complete(res) {
          console.log('addMarkers', res)
        }
      })
    })
  },

  removeMarkers() {
    this.mapCtx.addMarkers({
      clear: true,
      markers: []
    })
  },

  onMarkerTap(e) {
    console.log('@@ markertap', e)
  },
  
  onCalloutTap(e) {
    console.log('@@ onCalloutTap', e)
  },

  onLabelTap(e) {
    console.log('@@ labletap', e)
  }
})

3.实际效果

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值