我想在Leaflet/Shiny应用程序中根据子标记的属性之和自定义聚合标记的外观。
这类似于这个问题,该问题使聚合标记的图标颜色基于子项数目。如果我想根据地震的强度总和自定义图标怎么办?
使用纯JavaScript应用程序,似乎我应该能够为单个标记设置自定义属性,然后从iconCreateFunction
访问它,就像此示例中所做的那样。
但是,我正在使用来自leaflet for R的addCircleMarkers
和addMarkers
添加标记,并且似乎无法向正在生成的标记添加任意属性。下面的代码可以工作,但是如果取消注释两行(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>'});
}")
)
)
我考虑使用
addMarkers
的label=
选项,然后从Javascript中解析它。但是在JS中通过标记群组上的getAllChildMarkers()
访问的标记似乎没有label
属性。我还考虑将数据框从R传递到leaflet(JS),可能会以某种方式进行,例如此示例或此示例...?
,className: 'marker-cluster'
,但似乎我们必须重新指定所有内容。 - Antoinereturn new L.DivIcon({ html: '<div><span>' + sum + '</span></div>', className: 'marker-cluster marker-cluster-medium', iconSize: new L.Point(40,40)});
你需要编写自己的逻辑,以设置标记是大号、中号还是小号,就像原代码所做的那样。 - yosukesabai