Css 传单中两组的自定义标记聚类

Css 传单中两组的自定义标记聚类,css,r,leaflet,Css,R,Leaflet,假设data.frame的“group”列具有唯一值“group1”和“group2”。在传单中,我们可以使用ColorFactor()为这些组分配颜色。我们还可以用最少的CSS更改markerCluster颜色 我们如何为每组的标记聚类分配不同的颜色?换句话说,我希望“group1”中的点的所有标记簇都是“navy”,而“group2”中的点的所有标记簇在所有缩放级别上都是“red”,甚至下到各个点 在Rmd文件中: --- output: html_document --- <sty

假设data.frame的“group”列具有唯一值“group1”和“group2”。在传单中,我们可以使用
ColorFactor()
为这些组分配颜色。我们还可以用最少的CSS更改markerCluster颜色

我们如何为每组的标记聚类分配不同的颜色?换句话说,我希望“group1”中的点的所有标记簇都是“navy”,而“group2”中的点的所有标记簇在所有缩放级别上都是“red”,甚至下到各个点

在Rmd文件中:

---
output: html_document
---

<style>
.marker-cluster-small {
background-color: green;
}
.marker-cluster-small div {
background-color: green;
}
.marker-cluster-medium {
background-color: green;
}
.marker-cluster-medium div {
background-color: green;
}
.marker-cluster-large {
background-color: green;
}
.marker-cluster-large div {
background-color: green;
}
</style>

```{r}
library(leaflet)
library(magrittr)
quakes$group <- sample(c("group1", "group2"), 1000, replace = TRUE)
pal_group <- colorFactor(c("navy", "red"), c("group1", "group2"))

leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = quakes$long, 
    lat = quakes$lat, 
    clusterOptions = markerClusterOptions(),
    color = pal_group(quakes$group)
  )


---
输出:html\u文档
---
.标记簇小{
背景颜色:绿色;
}
.标记组小分区{
背景颜色:绿色;
}
.标记簇培养基{
背景颜色:绿色;
}
.中段{
背景颜色:绿色;
}
.标记簇大{
背景颜色:绿色;
}
.标记簇大div{
背景颜色:绿色;
}
```{r}
图书馆(单张)
图书馆(magrittr)
地震$group%
addCircleMarkers(
液化天然气=长时间地震,
lat=地震$lat,
clusterOptions=markerClusterOptions(),
颜色=pal_组(地震$组)
)

看起来您可能对这个答案感兴趣:

使用两个单独的MarkerClusterGroup可能不合适,通常情况下,某些点位于附近位置,但适用于不同的组。在这种情况下,lapper.markercluster可能会在同一位置显示两个单独的簇,彼此重叠(这正是我们希望首先使用簇避免的)

为了仍然显示能够提示每个类别中的子标记数量的集群,我们必须自定义集群图标。链接答案提出了此类自定义功能:

功能customClusterIcon(群集){
//计算每个类别中的标记数。
var markers=cluster.getAllChildMarkers();
var CAT1计数=0;
var cat2count=0;
for(标记的变量标记){
变量类别=marker.options.category;
如果(类别和类别=='cat2'){
CAT2计数+=1;
}否则{
CAT1计数+=1;
}
}
//根据不同类别标记的存在情况生成群集图标。
如果(cat2count==0){
返回L.divIcon({
html:cat1count,
类名:“cat1cluster群集”,
iconSize:[20,20]
});
}否则如果(cat1count==0){
返回L.divIcon({
html:cat2count,
类名:“cat2cluster群集”,
iconSize:[20,20]
});
}否则{
返回L.divIcon({
html:`
${cat1count}
${cat2count}
`,
类名:“”,
iconSize:[45,20]
});
}
}
巴黎var=[48.86,2.35];
var-parisLeft=[48.86,2.25];
var-parisRight=[48.86,2.45];
var map=L.map('map'{
最大缩放:18
}).setView(巴黎,11);
var mcg=L.markerClusterGroup({
iconCreateFunction:customClusterIcon
}).addTo(地图);
var category1=L.layerGroup();
var category2=L.layerGroup();
变量cat2style={
颜色:“红色”,
类别:'cat2'
};
var markerA=L.circleMarker(巴黎).addTo(类别1);
var markerB=L.circleMarker(巴黎).addTo(类别1);
var markerC=L.circleMarker(巴黎,Cat2样式).addTo(类别2);
var markerD=L.circleMarker(巴黎,cat2style).addTo(类别2);
var markerE=L.circleMarker(parisLeft).addTo(类别1);
var markerF=L.circleMarker(parisLeft).addTo(类别1);
var markerG=L.circleMarker(parisRight,cat2style).addTo(category2);
var markerH=L.circleMarker(parisRight,cat2style).addTo(category2);
mcg.addLayers([类别1,类别2]);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{
属性:“©;贡献者”
}).addTo(地图)
html,
身体,
#地图{
身高:100%;
保证金:0;
}
.Cat1群集{
背景色:#3388ff;
}
.Cat2群集{
背景色:红色;
}
.群集{
宽度:20px;
高度:20px;
显示:内联块;
文本对齐:居中;
}


您的group1和group2点是否聚集在一起?即,是否存在包含两组点的簇?似乎是一个好的开始,但似乎还没有融入到R传单中。@ghybs,在上面的例子中,是的。但我们可以很容易地将它们划分为各自的集群组。但是,对于每个不同的组,div类ID保持不变,这样标记聚类在所有缩放级别上都是相同的颜色。解决此问题的一种方法是为每个markercluster组自定义div类ID。在R中,您可以将JS函数传递给传单,传单可能持有该键