串扰:过滤Leaflet中的折线

时间:2017-03-23 11:00:47

标签: r leaflet rstudio

我无法使用传单和折线进行串扰 - 这是一个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
)

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

如果有人可以指出我正确的方向,那么很高兴能在R传单中解决这个问题。即改变/实施需要什么?我认为现在javascript方面缺少支持?

2 个答案:

答案 0 :(得分:2)

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

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

然后,您需要确保您的功能是Spatial对象,使用rgdal或raster很容易: 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'

然后为leaflet创建一个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 Issue

Github pull request from dmurdoch to add support for polygons/lines

Original solution - with outdated method "sd$transform"

Updated example - with the new "group" method, but I couldnt get their RMD to work

答案 1 :(得分:0)

如前所述Bhaskar Karambelkar: “串扰现在只适用于标记,而不适用于折线/多边形”

我希望这很快就会改变。