【空间分析】R语言做依时空变化的动态轨迹地图(以聊城机场到威海机场为例)

文摘   2024-12-11 08:45   山东  

各位亲,昨天我们分享了R语言"tmap"、"sf"包绘制静态地图及动态交互地图的画法,今天我们继续分享,用"data.table","terra","tmap","maptiles","sf","gifski"几个包绘制依时空变化的动态轨迹地图的方法。如下图所示为一张简易动态轨迹图:
在传染病病原体扩散、传染源活动轨迹描述中,可以应用可视化功能,分析评估影响范围,判断传染期和传播影响时段及空间位置。







第一步:

#安装加载需要使用的包。

install.packages(c(data.table","terra","tmap","maptiles","sf","gifski))

library(data.table)

library(terra)

library(tmap)

library(maptiles)

library(sf)

library(gifski)

c(,)是一组对象的组合,在安装程序包时应用,可避免重复操作,快速安装。





#创建这两个目标点(聊城与威海)的矢量,并展示在地图上

lc <- vect(

  cbind(115.91, 36.39), 

  atts = data.frame(name = "Liaocheng"),

  crs = "epsg:4326"

)

wh <- vect(

  cbind(121.94, 37.14), 

  atts = data.frame(name = "Weihai"),

  crs = "epsg:4326"

)

代码中包含两点所需的经纬度,参考坐标系等信息。






# 加载山东省行政区划矢量数据

shpdata <- st_read("路径/Shandong16.shp")

# 确保tmap处于静态地图模式

tmap_mode("plot")

# 绘图

tm_shape(shpdata) +

  tm_polygons(border.col = "white") +

  # 添加聊城点

  tm_shape(st_as_sf(lc)) +

  tm_dots(col = "red", size = 0.1) +

  tm_text("name", just = "left", xmod = 0.5) +

  # 添加威海点

  tm_shape(st_as_sf(wh)) +

  tm_dots(col = "red", size = 0.1) +

  tm_text("name", just = "right", xmod = -0.5)

如下图所示:









#使用approx()函数做线性插值

interp <- approx(x = c(115.91, 121.94), y = c(36.39, 37.14))

plot(interp$x, interp$y, ylim = c(0, 90))

#创建为SpatVector对象,并指定time信息

interp <- vect(cbind(interp$x, interp$y), crs = "epsg:4326")

interp$time <- 1:50

注意与上面目标点经纬度信息格式不同,插值范围中x为两点的经度、y为两点的纬度。









#根据指定的属性字段的唯一值,生成一系列地图

tm_shape(shpdata) +

  tm_polygons() +

  tm_facets(by = "FID_1")








# 自定义图标

plane_icon <- tmap_icons("C:/Users/hyy/Desktop/png.png")

把示意路径的小飞机图标读取并应用









#绘制轨迹图

flight <- tm_shape(shpdata) +

  tm_polygons(border.col = "white") +

  # 添加生成的路径点

  tm_shape(st_as_sf(interp)) +

  tm_dots(col = "red", size = 0.2) +

  # 将路径点以自定义图标的样式显示

  tm_shape(st_as_sf(interp)) +

  tm_symbols(shape = plane_icon, border.lwd = 0) +

  # 更改地图标题

  tm_layout(main.title = paste("Time:", interp$time)) +

  # 按时间绘制多幅地图,并强制所有地图使用同一个坐标范围

  tm_facets(along = "time", free.coords = FALSE) 

flight

可生成依时空变化的动态轨迹地图(聊城到威海)










# 利用"gifski"包导出gif格式动态地图

tmap_animation(flight, filename = "C:/Users/hyy/Desktop/flight.gif", delay = 10)












医学统计数据分析
分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
 最新文章