上面几个图是在不同比例尺下的手机截屏。
this.mapCtx = wx.createMapContext('map')
this.mapCtx.initMarkerCluster({ enableDefaultStyle: false, zoomOnClick: true, gridSize:30})
期望达到的效果:30像素范围内的都聚合,希望,聚合的时候要做判断,就是有点二次判断的感觉,比如这个图像中
可能聚合成了
但是这个黑色框和红色框离得距离也只有30像素不到,但是离打的这个圆30像素多,最终结果就没聚合过去。
我希望的是,聚合前,假设一个点,和他所有距离小于30像素的都聚合在一起,然后判断,这个聚合级中,所有点的小于30像素的再聚合;就是所有这些聚合点小于30像素的 都放一起。做递归或者其他循环判断。 当然可能结果是界面上的所有点都聚合在一起。
反正现在的效果比较差,还有就是数据量大于200个点的聚合很容易崩溃,大概手机上50%次数的尝试都奔溃了
请问楼主每次渲染默认的蓝色背景圈圈和聚合点长度这个都会显示,再显示自定义的的内容,这个有解决吗?
自己写了个点聚合,也不是太复杂
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
},
--试试我的小程序,到幢地图,就知道了,嘉兴市本级,都有数据
可搜索嘉兴 南湖,然后移到住宅区看看