串扰:在Leaflet中过滤折线

cno*_*cno 2 r rstudio leaflet

我无法让串扰与传单和折线一起工作 - 这是一个 MWE:

library(crosstalk)
library(leaflet)

theta <- seq(0, 2*pi, len = 100)
dat <- data.frame(
  lon = cos(theta),
  lat = sin(theta),
  t = 1:100
)

sd <- SharedData$new(dat)

map <- leaflet() %>%
  addTiles() %>%
  addCircleMarkers(data = sd, lat = ~lat, lng = ~lon, color = "blue") %>%
  addPolylines(data = sd, lat = ~lat, lng = ~lon, color = "blue")

bscols(
  filter_slider("t", "Time", sd, column = ~t),
  map
)
Run Code Online (Sandbox Code Playgroud)

时间 filter_slider 适用于圆形标记,但不适用于折线。

如果有人能给我指出正确的方向,我很乐意在 R 传单包中尝试修复此问题。即需要改变/实施什么?我认为目前 javascript 方面缺少支持?

And*_*ker 6

更新:好消息!@dmurdoch 已提交拉取请求以添加对折线和多边形的支持。使用他的串扰版本,您现在可以过滤传单线/多边形(如果它们是 sp 对象)(注意,它似乎不适用于 sf)。

首先,您需要安装此版本的串扰: devtools::install_github("dmurdoch/leaflet@crosstalk4")

然后,您需要确保您的要素是空间对象,可以轻松使用 rgdal 或栅格: shapes_to_filter <- raster::shapefile("data/features.shp") # raster import to 'Spatial Object' shapes_to_filter <- rgdal::readOGR("data/features.shp") # rgdal import to 'Spatial Object'

或者,如果您使用 sf 和 dplyr 来执行大多数空间任务(像我一样),请将 sf 对象转换为 Spatial:

library(dplyr) library(sf) shapes_to_filter <- st_read("data/features.shp") %>% as('Spatial') # sf import to 'Spatial Object'

然后为传单创建一个 sd 对象,并为过滤器创建一个数据框副本(重要提示:请注意如何使用 sd_map 中的组名称设置 sd_df 的组):

library(crosstalk) sd_map <- SharedData$new(shapes_to_filter) sd_df <- SharedData$new(as.data.frame(shapes_to_filter@data), group = sd_map $groupName())

使用 sd_df 创建串扰滤波器:

filter_select("filterid", "Select Filter Label", sd_df, ~SomeColumn)

使用 sd_map 对象创建地图:

library(leaflet) leaflet() %>% addProviderTiles("OpenStreetMap") %>% addPolygons(data = sd_map)

并且任何链接的表/图表还需要使用 sd_df 对象:

library(DT) datatable(sd_df)


以下是该解决方案的所有来源:

GitHub 问题

来自 dmurdoch 的 Github Pull 请求添加对多边形/线条的支持

原始解决方案 - 使用过时的方法“sd$transform”

更新的示例 - 使用新的“组”方法,但我无法让他们的 RMD 工作