#创建这两个目标点(聊城与威海)的矢量,并展示在地图上
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)