首页 > 解决方案 > 传单R,如何使与儿童统计相关的聚集图标出现?

问题描述

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

它类似于这个问题,它根据孩子的数量制作集群的图标颜色。如果我想根据地震震级的总和自定义图标怎么办?

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

但是我正在为 R 添加带有addCircleMarkersaddMarkers来自传单的标记,并且似乎我不能为正在生成的标记添加任意属性。下面的代码有效,但如果我取消注释两行(mag = ~magsum += 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>'});

  }")

  )
)

我考虑过使用label=选项addMarkers,然后从 Javascript 中解析它。但是getAllChildMarkers()在 JS 中使用标记簇访问的标记似乎没有label属性。

我还考虑过将数据帧从 R 传递到传单(JS),不知何故,可能像这个例子,或者这个......?

标签: javascriptrleaflet

解决方案


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

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>'});
  }")
  )
)

推荐阅读