使用xarray导出MODIS正弦格网数据为netCDF文件的方法咨询
MODIS正弦投影xarray Dataset导出netCDF实现方法
你原来的代码是针对WGS84地理坐标系设置的属性,MODIS正弦投影属于投影坐标系,需要按CF-netCDF规范配置投影坐标和投影映射参数,操作如下:
步骤1 配置投影坐标属性
MODIS正弦格网的水平坐标为x/y(单位为米),替换原有经纬度相关的属性配置:
# 配置x坐标(东向投影坐标)属性 stacked.x.attrs['long_name'] = 'x coordinate of projection' stacked.x.attrs['units'] = 'meters' stacked.x.attrs['standard_name'] = 'projection_x_coordinate' # 配置y坐标(北向投影坐标)属性 stacked.y.attrs['long_name'] = 'y coordinate of projection' stacked.y.attrs['units'] = 'meters' stacked.y.attrs['standard_name'] = 'projection_y_coordinate'
步骤2 添加投影映射变量
按照CF规范新增投影信息变量,记录MODIS正弦投影的参数:
# 新增投影映射变量 stacked['modis_sinusoidal'] = 0 stacked.modis_sinusoidal.attrs['grid_mapping_name'] = 'sinusoidal' stacked.modis_sinusoidal.attrs['longitude_of_central_meridian'] = 0.0 stacked.modis_sinusoidal.attrs['false_easting'] = 0.0 stacked.modis_sinusoidal.attrs['false_northing'] = 0.0 stacked.modis_sinusoidal.attrs['semi_major_axis'] = 6378137.0 stacked.modis_sinusoidal.attrs['semi_minor_axis'] = 6356752.314245179 stacked.modis_sinusoidal.attrs['units'] = 'meters'
步骤3 关联数据变量与投影信息
修改你的数据变量属性,关联投影坐标和投影映射:
# variable替换为你实际的数据集变量名 stacked[variable].attrs['coordinates'] = 'time x y' stacked[variable].attrs['grid_mapping'] = 'modis_sinusoidal'
步骤4 导出netCDF
直接调用xarray原生导出方法即可:
stacked.to_netcdf('modis_merged_output.nc')
快捷实现方案
如果你使用rioxarray读取的原始tif文件,可直接调用内置方法自动写入符合规范的投影信息,无需手动配置属性:
import rioxarray # 直接写入MODIS正弦投影CRS stacked.rio.write_crs("+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs", inplace=True) # 直接导出 stacked.to_netcdf('modis_merged_output.nc')
内容的提问来源于stack exchange,提问作者Stefano Potter
相关产品推荐
相关产品推荐

