传单中的聚类标记在R中提供密度信息

JWH*_*006 11 gis r leaflet

我想知道传单中的clusterMarkers是否有可能显示频率信息而不是聚集的标记数?

我有以下代码

getColor <- function(my.df) {
  sapply(my.df$value, function(value) {
  if(value <= 5) {
    "green"
  } else if(value <= 25) {
    "orange"
  } else {
    "red"
  } })
}
icons <- awesomeIcons(
  icon = 'ios-close',
  iconColor = 'black',
  library = 'ion',
  markerColor = getColor(my.df)
)


map <- my.df %>% 
    leaflet () %>%
    addTiles() %>%
    addAwesomeMarkers(icon=icons, label=~as.character(freq), clusterOptions = markerClusterOptions())
map
Run Code Online (Sandbox Code Playgroud)

my.df采用以下格式

longitude latitude freq
XX.xxx    XX.xxx    3
XX.xxx    XX.xxx    7
XX.xxx    XX.xxx    4
.
.
.
XX.xxx    XX.xxx    6
Run Code Online (Sandbox Code Playgroud)

我想要的是群集显示my.df $ freq的值的聚合而不是群集中的引脚数.我不知道如何做到这一点,或者甚至还有一个clusterOption.

tre*_*con 3

是的,这是可能的。

您必须使用iconCreateFunction函数,该函数作为 MarkerClusterGroup 的选项插入,用于创建自定义群集图标。您还需要使用getAllChildMarkers()函数来迭代集群的所有子节点并计算聚合值。

var markers = L.markerClusterGroup({
    iconCreateFunction: function(cluster) {
        let children = cluster.getAllChildMarkers();

        let sum = 0;
        for (let i = 0; i < children.length; i++) {
            sum += children[i].options.value;
        }

        return new L.DivIcon({ html: '<b>' + sum + '</b>' });
    }
}).addTo(map);

L.circleMarker([0,0], {value: 10}).addTo(markers);
L.circleMarker([10,0], {value: 20}).addTo(markers);
L.circleMarker([40,10], {value: 60}).addTo(markers);
Run Code Online (Sandbox Code Playgroud)

当然,您可以自定义图标。

这个jsfiddle: https: //jsfiddle.net/41mknp5s/1/是上述代码的实现。放大/缩小以查看显示标记总和的簇。

  • 这是一个 JavaScript 解决方案,而不是 R。 (2认同)