gpt4 book ai didi

r - 串扰 : filter Polylines in Leaflet

转载 作者:行者123 更新时间:2023-12-02 03:58:22 28 4
gpt4 key购买 nike

我无法使用传单和折线进行串扰 - 这是一个 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 传单包中解决这个问题。 IE。需要更改/实现什么?我假设现在在 javascript 方面缺少支持?

最佳答案

更新:好消息!@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_df 的组是如何使用 sd_map 中的组名设置的):

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 对象创建 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

关于r - 串扰 : filter Polylines in Leaflet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42974140/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com