微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MapBox 中的聚类标记,如何“累积”不同的属性?

如何解决MapBox 中的聚类标记,如何“累积”不同的属性?

我想在地图上显示标记,其中每个标记都是一个 UserLocation一个 User 可以有多个 UserLocation。 当我对标记进行聚类时,我想显示这些聚类标记用户列表,没有重复。

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

      { // Marker1
        type: 'Feature',properties: {user_id : "Daniele"},geometry: { type        : 'Point',coordinates : [lng0,lat0]
                  }
      },{// Marker2
        type: 'Feature',coordinates : [lng1,lat1]
                  }
      },{// Marker3
        type: 'Feature',properties: {user_id : "Roberto"},coordinates : [lng2,lat2]
                  }
      }

当我聚集它们时,单击聚集的圆圈,我想看到“Daniele,Roberto”。 我该怎么做?

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


**更新 2


JSFIDDLE

一个想法可以是构建一个不同名称的数组,然后使用 length 表达式来确定圆的大小。

反正应该是有语法错误...

 clusterProperties: {
  distinctNames : 
                ['case',/*cond  */ ["!",['in',['get','user_id'],['accumulated']]],/*result*/ ['concat',['concat',',']],/*default*/ ['accumulated']
                ]
}

解决方法

根据 documentation 你想要做这样的事情:

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',...]

代码看起来像这样:

   clusterProperties: {
      names: ['concat',']],distinctNames: [
          ['case',['in','distinctNames'],['at',['accumulated'],1]
            ['accumulated'],['literal',['+',0],1],'distinctNames']]]
          ],'%','%'] // wrap user ID in some unique character so we don't accidentally find user "rob" within another user "robin" for instance.
      ]
   }

文档中并不清楚累加器函数究竟是如何工作的,或者您如何访问当前值。他们的示例暗示它会是 ['get',<name of cluster property>],尽管这看起来有点奇怪。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?