制作带有聚类标记的传单地图。 markerClusterOptions()中是否有一个参数可根据缩放级别控制组数?例如,在默认缩放下,我的地图仅显示1800个观测值的3个群集。但是,如果在默认缩放下至少有两倍的簇,那将是很好的选择。
我不想使用 freezeAtZoom ,因为这样用户将无法放大并查看每个观察结果。
从https://data.sccgov.org/Public-Safety/Crime-Reports/n9u6-aijz/data
获取的数据library(tidyverse);library(leaflet);library(lubridate)
crime_reports <- read_csv("Crime_Reports.csv")
car_burglaries <- crime_reports %>% filter(incident_type_primary=="VEHICLE BURGLARY") %>%
mutate(datetime=mdy_hms(incident_datetime)) %>%
arrange(datetime)
leaflet(car_burglaries) %>% addTiles() %>%
addMarkers(
popup = ~paste(as.character(incident_datetime),",","Case number",as.character(case_number)),
label = ~as.character(address_1),
clusterOptions = markerClusterOptions()
)
答案 0 :(得分:7)
R leaflet
包文档mention中说,集群是通过名为Leaflet.markercluster
的Leaflet javascript库的插件完成的,记录在here中。 R leaflet
包中的许多函数都提到...
中的其他参数将传递给基础javascript库,但是要使用这些参数,了解javascript文档的方式将很有帮助。对于群集,您会注意到markerClusterOptions
将传递更多高级选项。
markercluster
文档说有一个论点maxClusterRadius
:
集群从中心标记覆盖的最大半径(以像素为单位)。默认值80。减少将创建更多更小的群集。您还可以使用接受当前地图缩放并返回最大簇半径(以像素为单位)的函数。
所以我弄了两个选择。我的“ RStudio视图”窗格中的屏幕截图:
默认半径80像素:
leaflet(car_burglaries) %>%
addTiles() %>%
addMarkers(
popup = ~paste(as.character(incident_datetime),",","Case number",as.character(case_number)),
label = ~as.character(address_1),
clusterOptions = markerClusterOptions()
)
半径越小=群集越多:
leaflet(car_burglaries) %>%
addTiles() %>%
addMarkers(
popup = ~paste(as.character(incident_datetime),",","Case number",as.character(case_number)),
label = ~as.character(address_1),
clusterOptions = markerClusterOptions(maxClusterRadius = 50)
)
更大的半径=更少的簇:
leaflet(car_burglaries) %>%
addTiles() %>%
addMarkers(
popup = ~paste(as.character(incident_datetime),",","Case number",as.character(case_number)),
label = ~as.character(address_1),
clusterOptions = markerClusterOptions(maxClusterRadius = 200)
)
如果您具有将鼠标悬停在标记上时显示覆盖区域的默认设置,那么它将有助于确定所需的半径。
值得一提的是,当前正在显示地图时,半径以像素为单位。这意味着显示的簇数将取决于地图的大小(以像素为单位)。如果您需要更复杂的东西,例如设置半径以根据窗口大小缩放,以便用户可以在调整窗口大小的同时保持簇数大致恒定,则可以编写一个函数以将该半径作为变量传递,也可以编写它在javascript中并以某种方式传递。我将其留在另一篇文章中。