Mapbox 地图框中的群集标记,如何;累积;只是不同的属性?

Mapbox 地图框中的群集标记,如何;累积;只是不同的属性?,mapbox,mapbox-gl-js,mapbox-marker,Mapbox,Mapbox Gl Js,Mapbox Marker,我想在地图上显示标记,其中每个标记都是一个UserLocation。一个用户可以有多个用户位置。 当我对标记进行聚类时,我希望显示那些聚类标记的用户列表,不重复 例如,让我们以这3个近标记为例: {//Marker1 键入:“功能”, 属性:{user_id:“Daniele”}, 几何体:{类型:'点', 坐标:[lng0,lat0] } }, {//Marker2 键入:“功能”, 属性:{user_id:“Daniele”}, 几何体:{类型:'点', 坐标:[lng1,lat1] } }

我想在地图上显示标记,其中每个标记都是一个
UserLocation
。一个
用户
可以有多个
用户位置
。 当我对标记进行聚类时,我希望显示那些聚类标记的用户列表,不重复

例如,让我们以这3个近标记为例:

{//Marker1
键入:“功能”,
属性:{user_id:“Daniele”},
几何体:{类型:'点',
坐标:[lng0,lat0]
}
},
{//Marker2
键入:“功能”,
属性:{user_id:“Daniele”},
几何体:{类型:'点',
坐标:[lng1,lat1]
}
},
{//Marker3
键入:“功能”,
属性:{user_id:“Roberto”},
几何体:{类型:'点',
坐标:[lng2,lat2]
}
}
当我对它们进行聚类时,单击聚类圆,我想看到“Daniele,Roberto”。 我该怎么做

此外,我想根据聚集的不同用户的不同数量设置圆圈的大小(在上面的示例中,应该是2)


**更新2


根据您想要做的事情:

map.addSource(userData, {
   id: 'user-locations',
   type: 'geojson',
   data: 'myuserdata.geojson',
   cluster: true,
   clusterProperties: {
      names: ['concat', ['concat', ['get', 'user_id'], ',']]
   }
}
源中的聚集点现在将具有一个属性,
names
,该属性将包含以逗号分隔(并以逗号结尾)的名称字符串

此外,我想根据聚集的不同用户的不同数量设置圆圈的大小(在上面的示例中,应该是2)

听起来…很有挑战性。我可以考虑这样做的一种方法是按照以下方式编写自定义累加器函数:

  • 使函数返回两个值的数组,
    [distinctNames,allNames]
    ,其中第一个值是整数,第二个值是字符串
  • 如果
    allNames
    包含当前名称,只需返回数组即可
  • 否则,返回一个数组
    [distinctNames+1,allNames+thisName]
在Mapbox GL表达式中这样操作数组是可能的,但操作起来相当精细。您需要使用
['literal',…]
['at',…]

代码如下所示:

map.addSource(userData, {
   id: 'user-locations',
   type: 'geojson',
   data: 'myuserdata.geojson',
   cluster: true,
   clusterProperties: {
      names: ['concat', ['concat', ['get', 'user_id'], ',']]
   }
}
clusterProperties:{
名称:['concat',['concat',['get','user_id'],','],
区别名称:[
[case'、[in'、[get'、[distinctNames']、[at'、[Cumultived'、1]
[“累计”],
['literal'、['+'、['at'、['cumulated']、0]、[1]、[concat'、[at'、[cumulated']、1]、[get'、[distinctNames']]
],
['concat'、'%'、['get'、'user_id']、'%']//将用户id包装成一些唯一的字符,这样我们就不会意外地在另一个用户“robin”中找到用户“rob”。
]
}

从文档中不清楚累加器函数是如何工作的,或者如何访问当前值。他们的示例暗示它将是
['get',]
虽然这看起来有点奇怪。

谢谢你的回答。我得到了你的逻辑,我会测试它并让你知道。谢谢你!算了吧…我还不太懂表达式语法,我对代码有点迷茫。我想括号不见了…你能修好吗?这会帮助我理解:)我用评论你的答案。我试图按照你的指示去做,但我遗漏了一些东西。更新2。尝试“累积”工作正如我所说的,这是一项非常具有挑战性的任务。我没有一个简单的方法来测试这段代码,只是希望为你指出正确的方向。