如何在xarray中将2D坐标转换为GEO2D类型(MODIS数据处理)
解决MODIS数据2D坐标转GEO2D类型问题
用xarray直接标记GEO2D坐标属性
GEO2D是MODIS数据特有的坐标标识,核心是给2D经纬度坐标添加对应元数据。你可以在创建xarray Dataset时,为坐标附加GEO2D相关属性:
# 定义GEO2D格式的经纬度属性 lon_attrs = { 'units': 'degrees_east', 'standard_name': 'longitude', 'grid_mapping': 'GEO2D' } lat_attrs = { 'units': 'degrees_north', 'standard_name': 'latitude', 'grid_mapping': 'GEO2D' } # 创建Dataset并绑定坐标属性 xr_tmp = xr.Dataset( { 'Gpp_500m': (('XDim', 'YDim', 'time'), Gpp_500m), 'Npp_500m': (('XDim', 'YDim', 'time'), Npp_500m), 'Npp_QC_500m': (('XDim', 'YDim', 'time'), Npp_QC_500m), }, coords=dict( lon=(['XDim', 'YDim'], lon, lon_attrs), lat=(['XDim', 'YDim'], lat, lat_attrs), time=_time_ ) ) # 添加GEO2D网格映射变量(严格匹配MODIS格式要求) xr_tmp['GEO2D'] = xr.DataArray( [], attrs={ 'grid_mapping_name': 'latitude_longitude', 'longitude_of_prime_meridian': 0.0, 'semi_major_axis': 6378137.0, 'inverse_flattening': 298.257223563 } )
用pyModis读取原生GEO2D坐标
如果你的原始数据是MODIS HDF产品,pyModis可以直接解析自带的GEO2D坐标,无需手动构建:
from pymodis import parseModis # 读取MODIS HDF文件 modis_hdf = "your_modis_file.hdf" modis_parser = parseModis.parseModis(modis_hdf) # 获取原生GEO2D格式的经纬度数组 lon_geo2d, lat_geo2d = modis_parser.getGeoLocation() # 基于原生坐标创建Dataset xr_tmp = xr.Dataset( { 'Gpp_500m': (('XDim', 'YDim', 'time'), Gpp_500m), 'Npp_500m': (('XDim', 'YDim', 'time'), Npp_500m), 'Npp_QC_500m': (('XDim', 'YDim', 'time'), Npp_QC_500m), }, coords=dict( lon=(['XDim', 'YDim'], lon_geo2d), lat=(['XDim', 'YDim'], lat_geo2d), time=_time_ ) ) # 保留原始GEO2D属性 xr_tmp.lon.attrs = modis_parser.metadata['longitude'].attrs xr_tmp.lat.attrs = modis_parser.metadata['latitude'].attrs
验证转换结果
执行以下代码查看坐标属性,确认是否包含GEO2D标识:
print(xr_tmp.lon.attrs) print(xr_tmp.lat.attrs)
内容的提问来源于stack exchange,提问作者马希仁
相关产品推荐
相关产品推荐

