You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中遍历SharedData对象为Leaflet添加独立折线并支持Crosstalk交互

解决方案

核心思路是不直接遍历SharedData对象,而是基于原始数据的分组标识,循环生成每个分组对应的SharedData子实例,既保留Crosstalk的联动属性,又能避免不同路线的点位互相连接。

完整可运行代码

# 加载依赖包
library(dplyr)
library(leaflet)
library(crosstalk)

# 示例数据
data <- data.frame(lon = c(12.42111, 12.42111, 12.41170, 12.42111, 12.39508, 12.39970, 12.42111, 12.39508),
                   lat = c(55.73615, 55.73615, 55.74155, 55.73615, 55.73074, 55.73871, 55.73615, 55.73074),
                   date = c("2020-03-28 12:46:29", "2020-03-28 13:20:42", "2020-03-28 13:50:47", "2020-03-28 18:33:44",
                            "2020-03-28 19:24:11", "2020-03-28 20:31:29", "2020-03-28 21:33:29", "2020-03-28 21:42:05"),
                   group = c(1, 1, 1, 1, 2, 2, 2, 2))
data$date <- as.POSIXct(data$date, format="%Y-%m-%d %H:%M:%S")

# 创建全局SharedData,指定统一的Crosstalk组保证联动
shared_data <- SharedData$new(data, group = "route_filter")

# 生成时间滑块,绑定到同一个Crosstalk组
time_slider <- filter_slider(
  id = "time_select",
  label = "选择时间范围",
  sharedData = shared_data,
  column = ~date,
  time_format = "%Y-%m-%d %H:%M"
)

# 初始化地图
temp_leaflet <- leaflet() %>% addTiles()

# 按原始数据的分组循环添加折线
group_list <- unique(data$group)
for (i in group_list) {
  # 生成当前分组的SharedData子实例,保留联动属性
  group_shared <- shared_data %>% filter(group == i)
  temp_leaflet <- temp_leaflet %>% 
    addPolylines(
      data = group_shared,
      lng = ~lon, 
      lat = ~lat, 
      group = as.character(i)
    )
}

# 配置默认隐藏分组和图层控制
temp_leaflet <- temp_leaflet %>%
  hideGroup(as.character(group_list)) %>% 
  addLayersControl(
    overlayGroups = as.character(group_list),
    options = layersControlOptions(collapsed = FALSE)
  )

# 组合滑块和地图展示
bscols(time_slider, temp_leaflet, widths = c(3, 9))

关键说明

  • 所有分组的SharedData子实例共享同一个Crosstalk组,时间滑块的筛选会同步作用到所有折线上,自动过滤不符合时间范围的点位
  • 每次调用addPolylines仅传入当前分组的SharedData数据,不会出现不同路线的点位互相连接的问题
  • 分组默认隐藏、图层控制的逻辑和原生Leaflet用法完全一致,不受SharedData影响

内容的提问来源于stack exchange,提问作者Soren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:06:06