1***@qq.com
1***@qq.com
  • 发布:2022-03-02 13:46
  • 更新:2022-04-11 17:09
  • 阅读:2274

uniapp中map组件中聚合点样式怎么修改

分类:uni-app

uniapp中map组件中聚合点样式怎么修改,我想修改聚合点聚合之后的样式,但是没有在地图组件上找到可以提供修改聚合之后的样式属性

2022-03-02 13:46 负责人:无 分享
已邀请:
x***@163.com

x***@163.com

我的是nvue页面,以下是由官方示例修改而来

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", (clusters) => {  
        console.log("markerClusterCreate", clusters);  
        this.updateClusters(clusters)  
      });  

      this.addMarkers();  
    },  
    methods: {  
      updateClusters(clu){  
                let clusterMarkers = []  
                clu.forEach((cluster, index) => {  
                    const {  
                        center, // 聚合点的经纬度数组  
                        clusterId, // 聚合簇id  
                        markerIds // 已经聚合了的标记点id数组  
                    } = cluster  
                    let clusterObj = {  
                        clusterId, //必须  
                        ...center,  
                        width: 50,  
                        height: 50,  
                        iconPath: `../../static/icon/location_bg.png`,   // 如果label不能满足需求,可用图片  
                        joinCluster: true,   // 注意:不加此项 自定义样式不显示,  
                        label: { // 定制聚合簇样式  
                            content: markerIds.length + '',  
                            fontSize: 16,  
                            color: '#fff',  
                            width: 50,  
                            height: 50,  
                            bgColor: 'transparent',  
                            borderRadius: 25,  
                            textAlign: 'center',  
                            anchorX: -25,  
                            anchorY: -50,  
                        }  
                    }  
                    clusterMarkers.push(clusterObj)  
                })  
                console.log(clusterMarkers)  
                // 添加聚合簇  
                this._mapContext .addMarkers({  
                    markers: clusterMarkers,  
                    clear: false, //是否先清空地图上所有的marker  
                })  
            },  
      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)  
            }  
          })  
        })  
      }  
    }  
  }
  • 1***@qq.com (作者)

    <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", (clusters) => {
    console.log("markerClusterCreate", clusters);
    this.updateClusters(clusters)
    });

    this.addMarkers();
    },
    methods: {
    updateClusters(clu) {
    let clusterMarkers = []
    clu.forEach((cluster, index) => {
    const {
    center, // 聚合点的经纬度数组
    clusterId, // 聚合簇id
    markerIds // 已经聚合了的标记点id数组
    } = cluster
    let clusterObj = {
    clusterId, //必须
    ...center,
    width: 50,
    height: 50,
    iconPath: `/static/jh.png`, // 如果label不能满足需求,可用图片
    joinCluster: true, // 注意:不加此项 自定义样式不显示,
    label: { // 定制聚合簇样式
    content: markerIds.length + '',
    fontSize: 16,
    color: '#fff',
    width: 50,
    height: 50,
    bgColor: '#bd4eff',
    borderRadius: 25,
    textAlign: 'center',
    anchorX: -25,
    anchorY: -50,
    }
    }
    clusterMarkers.push(clusterObj)
    })
    console.log(clusterMarkers)
    // 添加聚合簇
    this._mapContext.addMarkers({
    markers: clusterMarkers,
    clear: false, //是否先清空地图上所有的marker
    })
    },
    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>

    2022-04-11 18:08

  • 1***@qq.com (作者)

    我按照你的试了一下,自定义样式改了背景颜色和iconPath图片,然后出现的聚合点样式还不是我修改后的样式,也是nvue页面,真机运行测试(苹果系统)

    2022-04-11 18:10

  • x***@163.com

    回复 1***@qq.com: 安卓可以,但要在聚合的marker里也加上joinCluster: true,不然也不生效。刚试了下ios确实不行,再看看怎么搞吧,hbuilderx是最新版

    2022-04-11 20:41

  • 1***@qq.com (作者)

    回复 x***@163.com: 我也是最新版本,但是ios系统上修改自定义样式,就是不生效,就很头疼

    2022-04-12 08:45

  • 挽风入耳

    为啥我生效的是label 而不是外面的圈呢 我凑 -_-

    2022-08-17 17:53

  • while

    回复 1***@qq.com: 你们使用这个不会一直触发markerClusterCreate事件吗,我怎么一直在闪

    2024-03-19 17:15

该问题目前已经被锁定, 无法添加新回复