如何在Julia的Rasters包中为栅格添加时间维度?
在Julia的Rasters包中为栅格添加时间维度
我正在学习Julia,日常处理大量地理空间数据,接触到了Rasters包——它相当于R语言的Terra或Python的Rasterio。目前已成功导入栅格数据并创建时间序列,但找不到读取栅格后添加时间维度的方法,官方示例多为创建栅格时同时定义时间维度。
现有代码
using Dates using Rasters, ArchGDAL # 创建日期序列 dates = Ti(DateTime(1981, 01, 01):Month(1):DateTime(2018, 12, 27)) # 导入栅格 raster= RasterStack("/rasterpath/raster.tif")
官方示例(创建栅格时定义时间维度)
官方示例:
using Rasters, Dates lon, lat = X(25:1:30), Y(25:1:30) ti = Ti(DateTime(2001):Month(1):DateTime(2002)) ras = Raster(rand(lon, lat, ti)) # 根据给定维度生成随机数
R语言实现方式
library(terra) # 定义日期范围 start_date <- as.Date("1982-01-01") end_date <- as.Date("2018-12-27") # 创建月度间隔的日期序列 dates <- seq(start_date, end_date, by = "month") # 导入栅格 raster<- rast("/rasterpath/raster.tif") # 分配时间值 time(raster) <- dates
Python语言实现方式
import pandas as pd import rioxarray # 定义日期范围 start_date = pd.Timestamp('1982-01-01') end_date = pd.Timestamp('2018-12-27') # 创建月度间隔的日期序列 dates = pd.date_range(start_date, end_date, freq='M') # 打开带掩膜的月度平均GPP栅格 raster = rioxarray.open_rasterio("/rasterpath/raster.tif") # 扩展栅格的时间维度 raster = raster.expand_dims(time=dates)
Julia Rasters包解决方案
方法一:使用expand_dims扩展单时间片栅格的时间维度
如果导入的是单个时间片的栅格数据,直接用expand_dims函数添加时间维度,操作类似Python的rioxarray:
using Dates using Rasters, ArchGDAL # 创建日期序列 dates = Ti(DateTime(1981, 01, 01):Month(1):DateTime(2018, 12, 27)) # 导入栅格 raster = RasterStack("/rasterpath/raster.tif") # 扩展时间维度 raster_with_time = expand_dims(raster, dates)
方法二:使用cat拼接多时间片栅格并添加时间维度
如果有多个对应不同时间点的栅格文件,先读取所有栅格,再通过cat函数拼接并绑定时间维度:
using Dates using Rasters, ArchGDAL # 创建日期序列 dates = Ti(DateTime(1981, 01, 01):Month(1):DateTime(2018, 12, 27)) # 读取所有时间对应的栅格文件 raster_files = ["/rasterpath/raster_198101.tif", "/rasterpath/raster_198102.tif", ...] rasters = [RasterStack(file) for file in raster_files] # 拼接栅格并添加时间维度 raster_with_time = cat(rasters..., dims=dates)
内容的提问来源于stack exchange,提问作者Fagro
相关产品推荐
相关产品推荐

