单张集群标记的间距,或缩小时如何缩小分组

时间:2019-05-10 01:53:36

标签: r leaflet

制作带有聚类标记的传单地图。 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()
)

1 个答案:

答案 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()
  )

default radius

半径越小=群集越多:

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)
  )

smaller radius

更大的半径=更少的簇:

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)
  )

bigger radius

如果您具有将鼠标悬停在标记上时显示覆盖区域的默认设置,那么它将有助于确定所需的半径。

值得一提的是,当前正在显示地图时,半径以像素为单位。这意味着显示的簇数将取决于地图的大小(以像素为单位)。如果您需要更复杂的东西,例如设置半径以根据窗口大小缩放,以便用户可以在调整窗口大小的同时保持簇数大致恒定,则可以编写一个函数以将该半径作为变量传递,也可以编写它在javascript中并以某种方式传递。我将其留在另一篇文章中。