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

如何使用R制作车辆沿OSRM规划路线移动的可视化动画

R语言实现车辆沿规划路线行驶的动画制作方法

需求背景

我们已经通过osrm包完成了纽约世贸中心一号楼到麦迪逊广场公园的路径查询,得到总行驶时间为10.37分钟,现在需要制作可视化动画,以标记点代表车辆,沿规划路径匀速行驶,可使用tmap工具实现。
原路径查询的静态效果如下:
路径规划效果图

完整实现代码

1. 基础路径查询(原有逻辑保留)

library(sf)
library(dplyr)
library(tidygeocoder)
library(osrm)
library(tmap)

# 起点:纽约世贸中心一号楼,终点:纽约麦迪逊广场公园
addresses <- c("285 Fulton St, New York, NY 10007", 
               "11 Madison Ave, New York, NY 10010")

# 地址转坐标,转为sf空间对象
data <- tidygeocoder::geo(addresses, method = "osm") %>% 
  st_as_sf(coords = c("long", "lat"), crs = 4326)

# 调用OSRM接口查询路径
osroute <- osrm::osrmRoute(loc = data, returnclass = "sf")

2. 采样车辆行驶点位(适配匀速假设)

因为我们假设车辆匀速行驶,所以对路径线做等距离采样,每个采样点对应动画一帧的车辆位置:

# 总行驶时长(单位:分钟)
total_time <- osroute$duration
# 设置动画总帧数,数值越大动画越流畅,生成速度越慢
n_frames <- 60
# 沿路径等距采样点位
sample_points <- st_line_sample(osroute$geometry, n = n_frames) %>% 
  st_cast("POINT") %>% 
  st_as_sf(crs = 4326) %>% 
  # 给每帧加时间标记
  mutate(frame = 1:n(),
         time_passed = total_time * frame / n_frames)

3. 生成tmap动画并导出

# 先创建tmap的动画图层
tm <- tm_shape(osroute) +
  # 底图用CartoDB浅色风格
  tm_basemap("CartoDB.Positron") +
  # 绘制规划路径红线
  tm_lines(col = "red", lwd = 2) +
  # 绘制起点终点标记
  tm_shape(data) +
  tm_markers(size = 1, labels = ~address) +
  # 绘制当前帧的车辆位置
  tm_shape(sample_points) +
  tm_symbols(col = "blue", size = 0.5, group = "frame") +
  # 按frame列分帧生成动画
  tm_facets(along = "frame", free.coords = FALSE)

# 导出为gif动图,如果要导出mp4可以把后缀改成.mp4,需要系统安装ffmpeg
tmap_animation(tm, filename = "route_animation.gif", delay = 100, width = 800, height = 600)

参数说明

  • n_frames:控制动画的总帧数,数值越高动画越平滑,同时生成耗时越长
  • delay:控制每帧之间的间隔,单位为1/100秒,数值越小动画播放速度越快
  • 如果需要导出MP4格式的视频,只需要把tmap_animation的文件名后缀改为.mp4即可,需要提前在系统中安装ffmpeg工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:33:03