当处理多年暴雨的 TIF 数据集时,我们可以使用 rioxarray 库将这些数据合成为一个 NetCDF (nc) 文件。NetCDF 是一种常用的科学数据格式,它具有跨平台、可扩展和自描述的特点,非常适合存储和共享地理空间数据。
我们需要首先定义一个包含多个 TIF 文件路径的列表,并使用 rioxarray.open_rasterio 函数打开这些文件,得到相应的 xarray 数据集。然后,通过使用 xr.concat 函数将这些数据集沿时间维度进行合并,形成一个大的数据集。最后,我们可以使用 to_netcdf 方法将合并后的数据集保存为 NetCDF 文件。
评论
!pip install rioxarray -i https://pypi.mirrors.ustc.edu.cn/simple/
In [11]:
import os
import xarray as xr
import numpy as np
import pandas as pd
import netCDF4 as nc
from osgeo import gdal
from glob import glob
import rioxarray
import warnings
warnings.filterwarnings('ignore')
path = '/home/mw/input/precip7227/RainStormChina/RainStormChina/'
file_list = []
for year in range(2001,2020):
file = glob(path+str(year)+'/*Level*.tif')
print(file)
file_list.append(file[0])
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2001/StormLevel2001.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2002/StormLevel2002.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2003/StormLevel2003.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2004/StormLevel2004.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2005/StormLevel2005.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2006/StormLevel2006.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2007/StormLevel2007.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2008/StormLevel2008.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2009/StormLevel2009.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2010/StormLevel2010.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2011/StormLevel2011.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2012/StormLevel2012.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2013/StormLevel2013.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2014/StormLevel2014.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2015/StormLevel2015.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2016/StormLevel2016.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2017/StormLevel2017.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2018/StormLevel2018.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2019/StormLevel2019.tif']
In [13]:
import rioxarray
dataset = rioxarray.open_rasterio(file_list[0])
# 获取 TIF 文件中的变量
dataset
In [14]:
xds_list = []
time_coord = pd.date_range(start='2001-01-01', end='2019-01-01', freq='AS')
for file in file_list:
for i in time_coord:
xds = rioxarray.open_rasterio(file)
xds = xds.assign_coords(time=i)
xds_list.append(xds)
merged_xds = xr.concat(xds_list, dim='time')
merged_xds
坏了,两个循环跑出三百多个时间点,怎么办?我只需要01到19年呀 不要怕,神奇海螺说zip的魔术可以帮忙
xds_list1=[]
for file, time in zip(file_list, time_coord):
xds = rioxarray.open_rasterio(file)
xds = xds.assign_coords(time=time)
xds_list1.append(xds)
merged_xds1 = xr.concat(xds_list1, dim='time')
merged_xds1
merged_xds1[1].plot()
<matplotlib.collections.QuadMesh at 0x7fec00112bd0>