更新:好消息!
@dmurdoch 已提交拉取请求以添加对折线和多边形的支持。
使用他的串扰版本,您现在可以过滤传单线/多边形,如果它们是 sp 对象(注意,它似乎还不适用于 sf)。
首先您需要安装此版本的串扰:
devtools::install_github("dmurdoch/leaflet@crosstalk4")
然后你需要确保你的特征是空间对象,很容易使用 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'
然后为传单创建一个 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