使用 xarray 在 MODIS 正弦网格中导出 netcdf 文件

Exporting netcdf file in MODIS sinusoidal grid with xarray

我在 MODIS 正弦网格中有 18 个 tif 文件,我想将其转换为一个 netcdf 格式的文件。我已将 tifs 转换为名为 stacked 的 xarray xarray.core.dataset.Dataset 格式。此时,如果我的投影是 WGS 84,我通常可以像这样导出到 netcdf:

stacked.lat.attrs['long_name'] = 'latitude'
stacked.lat.attrs['units'] = 'degrees_north'
stacked.lat.attrs['standard_name'] = 'latitude'
   
stacked.long.attrs['long_name'] = 'longitude'
stacked.long.attrs['units'] = 'degrees_east'
stacked.long.attrs['standard_name'] = 'longitude'
   
    
stacked[variable].attrs['coordinates'] = 'time lat long'

但由于 MODIS 不是度数,这会导致问题。我试图将单位更改为 'meters' 但这没有用。有没有办法使用 MODIS (https://spatialreference.org/ref/sr-org/modis-sinusoidal-3/) 而不是 WGS 84 导出到 netcdf?

参考https://spatialreference.org/ref/sr-org/modis-sinusoidal-3/,我可以使用proj4标准定义crs。然后,我使用 rioxarray 对数据集进行地理配准。假设你的尺寸坐标是 yx,我会写:

import rioxarray

crs = "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"

stacked = stacked.rio.set_spatial_dims(x_dim="x", y_dim="y").rio.write_grid_mapping().rio.write_crs(crs).rio.write_coordinate_system()

已创建 spatial_ref 坐标,您的坐标单位现在通常是正确的。

如果它不完全符合您的问题,请告诉我。