leaflet R,如何使聚类图标的外观与孩子统计数据相关?

4

我想在Leaflet/Shiny应用程序中根据子标记的属性之和自定义聚合标记的外观。

这类似于这个问题,该问题使聚合标记的图标颜色基于子项数目。如果我想根据地震的强度总和自定义图标怎么办?

使用纯JavaScript应用程序,似乎我应该能够为单个标记设置自定义属性,然后从iconCreateFunction访问它,就像此示例中所做的那样。

但是,我正在使用来自leaflet for R的addCircleMarkersaddMarkers添加标记,并且似乎无法向正在生成的标记添加任意属性。下面的代码可以工作,但是如果取消注释两行(mag =〜 mag sum + = markers [i] .mag; ),则不起作用。

leaflet(quakes) %>% addTiles() %>% addMarkers(
  # mag = ~mag,
  clusterOptions = markerClusterOptions(
  iconCreateFunction=JS("function (cluster) {    
    var markers = cluster.getAllChildMarkers();
    var sum = 0; 
    for (i = 0; i < markers.length; i++) {
    //  sum += markers[i].mag;
      sum += 1;
    }
    return new L.DivIcon({ html: '<div><span>' + sum + '</span></div>'});

  }")

  )
)

我考虑使用addMarkerslabel=选项,然后从Javascript中解析它。但是在JS中通过标记群组上的getAllChildMarkers()访问的标记似乎没有label属性。
我还考虑将数据框从R传递到leaflet(JS),可能会以某种方式进行,例如此示例此示例...?
1个回答

6

我找到了答案。似乎我可以在addMarker中的options=里放入任意属性:

leaflet(quakes) %>% addTiles() %>% addMarkers(
  options = markerOptions(mag = ~mag),
  clusterOptions = markerClusterOptions(
  iconCreateFunction=JS("function (cluster) {    
    var markers = cluster.getAllChildMarkers();
    var sum = 0; 
    for (i = 0; i < markers.length; i++) {
      sum += Number(markers[i].options.mag);
//      sum += 1;
    }
    return new L.DivIcon({ html: '<div><span>' + sum + '</span></div>'});
  }")
  )
)

太好了,非常感谢分享(+1 +1)!您能指示如何保留聚类的默认颜色和形状吗?我尝试在JS函数末尾添加,className: 'marker-cluster',但似乎我们必须重新指定所有内容。 - Antoine
你需要像下面这样传递两个单词。return new L.DivIcon({ html: '<div><span>' + sum + '</span></div>', className: 'marker-cluster marker-cluster-medium', iconSize: new L.Point(40,40)}); 你需要编写自己的逻辑,以设置标记是大号、中号还是小号,就像原代码所做的那样。 - yosukesabai
我指的原始代码是MarkerClusterGroup类定义,_defaultIconCreateFunction(),可以在此处或附近找到:https://github.com/Leaflet/Leaflet.markercluster/blob/master/src/MarkerClusterGroup.js#L820-L833 - yosukesabai
非常好的解决方案,谢谢!我有一个与你类似的问题。它涉及到聚类连接标记簇的连续线串。也许这里还有其他人感兴趣:https://stackoverflow.com/questions/60436142/aggregate-weighted-linestrings-for-clustered-markers-in-leaflet-in-r - maxatSOflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接