如何制作带事件时间线的车辆沿路线移动动画并生成客户演示视频
带同步时间线的车辆移动动画实现方案
完全可以在现有车辆沿路线移动动画的基础上,添加同步联动的时间线,直接输出可供客户观看的自说明演示视频,核心实现逻辑如下:
- 建立动画帧与时间戳的映射关系:你现有车辆动画的每帧对应一个行程时间节点,将该节点与你预设的事件时间表做匹配,即可实现车辆位置、时间线进度、事件标注三者同步更新
- 时间线可视化可通过
ggplot2分栏/叠加图层实现:可在动画画布预留底部/侧边区域绘制固定时间轴,用动态移动的高亮标记指代当前进度,匹配到预设事件时自动显示对应事件文本 - 最终导出可直接用
gganimate的anim_save()函数,支持输出mp4、高清GIF等格式,帧率、分辨率均可自定义调整
参考代码扩展
基于你提供的基础代码,可按如下方向扩展时间线联动逻辑:
# 原有基础依赖保留 library(sf) library(dplyr) library(tidygeocoder) library(osrm) library(lubridate) library(ggplot2) library(gganimate) # 新增动画导出依赖 # ----- 原有基础代码部分 开始 ----- # 地址 adresses <- c("285 Fulton St, New York, NY 10007", # 世贸中心一号楼 "11 Madison Ave, New York, NY 10010", "Rockefeller Center, 45 Rockefeller Plaza, New York, NY 10111") # 地址转地理坐标 geocoded_addresses <- tidygeocoder::geo(adresses, method = "osm") %>% st_as_sf(coords = c("long", "lat"), crs = 4326) # 基准时间 t <- as_datetime("2021-08-23 8:00:00", tz = "America/New_York") timeline <- tibble( time = c(t, t+minutes(10), t+minutes(12), NA, t+minutes(25), t+minutes(30), t+minutes(32), NA, t+minutes(38), NA), events = c("等待", "收到叫车请求", "开始行程", "行程结束", "收到叫车请求", "开始行程", "收到叫车请求", "行程结束", "开始行程", "行程结束") ) # ----- 原有基础代码部分 结束 ----- # 新增:获取路线、生成逐帧时间点与车辆位置的对应表(基于你之前已实现的路线动画逻辑补充) # 此处省略你已掌握的路线插值、逐帧位置生成代码,仅补充时间线联动逻辑 # 新增:动画绘制逻辑,用patchwork包拼接地图图层和时间线图层 library(patchwork) p1 <- ggplot() + # 你原有绘制路线、车辆位置的图层逻辑 transition_time(current_time) # current_time为每帧对应的时间戳 p2 <- ggplot(timeline, aes(x = time)) + geom_vline(aes(xintercept = current_time), color = "red", size = 1.2) + # 同步移动的时间线标记 geom_text(aes(label = ifelse(time == current_time, events, NA)), vjust = -0.5) + # 触发时显示事件 scale_x_datetime(limits = c(min(timeline$time, na.rm = T), max(timeline$time, na.rm = T))) + theme_minimal() # 拼接两个图层生成最终动画 full_anim <- p1 / p2 + plot_layout(height = c(3,1)) # 导出为mp4视频 anim_save("车辆行程演示.mp4", full_anim, fps = 24, width = 1920, height = 1080)
示例事件序列

内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

