使用 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
对数据集进行地理配准。假设你的尺寸坐标是 y
和 x
,我会写:
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
坐标,您的坐标单位现在通常是正确的。
如果它不完全符合您的问题,请告诉我。
我在 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
对数据集进行地理配准。假设你的尺寸坐标是 y
和 x
,我会写:
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
坐标,您的坐标单位现在通常是正确的。
如果它不完全符合您的问题,请告诉我。