Интервал между маркерами кластера листовок, или как иметь меньшие группы при уменьшении - PullRequest
7 голосов
/ 10 мая 2019

Создание листовки с кластерными маркерами.Есть ли в markerClusterOptions () параметр, управляющий количеством групп в зависимости от уровня масштабирования?Например, при увеличении по умолчанию моя карта показывает только 3 кластера для 1800 наблюдений.Однако было бы неплохо, если бы при масштабировании по умолчанию было как минимум вдвое больше кластеров.

Я не хочу использовать 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 Ответ

7 голосов
/ 15 мая 2019

Пакет документов R leaflet упоминает , что кластеризация осуществляется через плагин для библиотеки javascript Leaflet под названием Leaflet.markercluster, здесь задокументировано . Многие функции в пакете 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 и передать его как-нибудь. Я оставлю это для другого поста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...