收藏
回答

点聚集-与预计效果有差距

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小程序 Bug Android 最新版 MATE10 最新版

上面几个图是在不同比例尺下的手机截屏。

 this.mapCtx = wx.createMapContext('map')

    this.mapCtx.initMarkerCluster({ enableDefaultStyle: false, zoomOnClick: true, gridSize:30})


期望达到的效果:30像素范围内的都聚合,希望,聚合的时候要做判断,就是有点二次判断的感觉,比如这个图像中

可能聚合成了

但是这个黑色框和红色框离得距离也只有30像素不到,但是离打的这个圆30像素多,最终结果就没聚合过去。

我希望的是,聚合前,假设一个点,和他所有距离小于30像素的都聚合在一起,然后判断,这个聚合级中,所有点的小于30像素的再聚合;就是所有这些聚合点小于30像素的 都放一起。做递归或者其他循环判断。 当然可能结果是界面上的所有点都聚合在一起。

反正现在的效果比较差,还有就是数据量大于200个点的聚合很容易崩溃,大概手机上50%次数的尝试都奔溃了


回答关注问题邀请回答
收藏

2 个回答

  • 其实你都行
    其实你都行
    06-07

    请问楼主每次渲染默认的蓝色背景圈圈和聚合点长度这个都会显示,再显示自定义的的内容,这个有解决吗?

    06-07
    有用
    回复 1
    • 缪伟光(白色SKY)
      缪伟光(白色SKY)
      06-16
      我根本没用点聚合,只用了个marker,所以你只要set这个marker就行了
      06-16
      回复
  • 缪伟光(白色SKY)
    缪伟光(白色SKY)
    04-11

    自己写了个点聚合,也不是太复杂

    04-11
    有用
    回复 3
    • 甲乙。
      甲乙。
      05-08
      楼主实现了?可以提供代码片段参考参考吗?万分感谢!
      05-08
      回复
    • 缪伟光(白色SKY)
      缪伟光(白色SKY)
      05-08回复甲乙。
      var that= this;
         var markerlist=that.data.markerlist
         const mapCtx = wx.createMapContext('map', this);
         mapCtx.getScale({
           success: res => {
             var cscale=res.scale
         //console.log(cscale) 小于15.9才开始聚合,聚合就是把marks里边的数据读出来,然后我自己设定的就是在0.01的经纬度框内的分成4个点,这个你自己看需求,可以分的多一点,或者分的少一点,或者根据scale来定义。
         if(res.scale<15.9){  
        if (isCluster) {return}
          isCluster=true
           let arritem=[]
           let markercl=[]
          if(markerlist.length>0){
            markerlist.forEach(function(item, index){
              // 判断9ge
            item.m.forEach(function(item, index){
           arritem.push(that.getclid(item.lt)*10000000+that.getclid(item.lg))
          })
        })
          }
          arritem.sort();
          let arrn=1
          for(let i=0;i<arritem.length;i++){ // 最后一个要考虑一下
           if((i<arritem.length-1)&&(arritem[i]==arritem[i+1]))
           {arrn=arrn+1
           }
           else
           {
          markercl.push({id:arritem[i],arrn:arrn});
          arrn=1
           }
          }
          console.log(markercl)
          let markers=[];
           for(let i=0;i<markercl.length;i++)
           {
               markers= markers.concat(
                 that.newarray_culabel(markercl[i].id,markercl[i].arrn))}
            console.log( markers)
            that.setData({markers:markers}) 
          // mapCtx.initMarkerCluster({ enableDefaultStyle: false, zoomOnClick: true, gridSize:500, complete(res) {
          // mapCtx.addMarkers({ markers:that.data.markerslast, clear: true })
         // }
        //})
        // for(let i=0;i<that.data.markerslast.length;i++){ that.data.markerslast[i].joinCluster=true; }
          }








        getclid(latitude){
          //let dataid=(longitude+500)*1000*1000+(latitude+500).toFixed(6)*1000*1000*1000*1000*1000;
          let a=parseInt((latitude+500)*1000)-parseInt((latitude+500)*100)*10;
          let b=parseInt((latitude+500)*100)*100
          if(a<5)
          {b=b+25}
          else
          {b=b+75}
          return b
            },
      05-08
      回复
    • 缪伟光(白色SKY)
      缪伟光(白色SKY)
      05-08
      这个是效果,然后点击其中的点,就把定位到这个点,在直接读取marks,就不聚合了,我写的很简单,没这么复杂,但是可控可用
      --试试我的小程序,到幢地图,就知道了,嘉兴市本级,都有数据
      可搜索嘉兴 南湖,然后移到住宅区看看
      05-08
      回复
登录 后发表内容
问题标签