r - 传单中的簇标记提供 R 中的密度信息

标签 r leaflet gis

我想知道传单中的 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

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

我希望集群显示 my.df$freq 值的聚合,而不是集群中的引脚数。我不确定如何执行此操作,或者是否有用于此的 clusterOption。

最佳答案

是的,这是可能的。

您必须使用 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);

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

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

关于r - 传单中的簇标记提供 R 中的密度信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272702/

相关文章:

r - 在 R 中提取栅格的最快方法(提高我的可重现代码的时间)

r - 如何仅获取 ID 的日期早于具有相同 ID 的另一行的行?

r - 如何使用 R 查找数字序列中的所有循环

javascript - 传单,否则 if = 不显示标记

angularjs - 无效的 Geojson 对象 Angularjs &Leafletjs

wpf - 设计 WPF map 控件

相当于 OpenLayers 的 Java

r - 从POSIXct对象中提取星期数

r - 在编程中使用 dplyr mutate()

javascript - map 中的圆圈(大小可缩放)