对xarray DataArray的y维度切片时出现异常行为
问题原因及解决办法
核心原因
你的GeoTIFF文件的y轴坐标是倒序排列的(多数投影坐标系的GeoTIFF会采用北到南的存储顺序,也就是y坐标值从大到小依次排列)。xarray的sel()方法中,slice(a,b)默认按坐标的升序范围筛选(即取a ≤ 坐标 ≤ b的部分),但如果y坐标是从大到小,你写的slice(4444550,4444560)相当于要找比4444550大且比4444560小的y值,而实际y坐标是递减的,自然没有符合条件的结果,返回长度为0的维度。精确匹配能生效,是因为该坐标值确实存在于y轴数组中。
验证步骤
先确认y坐标的顺序:
# 打印前5个y坐标值,查看是否从大到小排列 print(tif_xr.y.values[:5])
解决办法
方法1:调整slice的起止顺序
既然y坐标是倒序,直接把slice的两个值反过来写,让大值在前、小值在后:
# 倒序slice,匹配y从4444560到4444550的范围(对应空间上的南到北区域) tif_xr.sel(y=slice(4444560, 4444550))
方法2:将y轴坐标转为升序排列
如果你习惯用升序的slice逻辑,可以先对y轴进行排序,之后就能用正常的slice(小值,大值)筛选:
# 对y轴排序,坐标转为升序,同时数据也会对应调整空间位置 tif_xr_sorted = tif_xr.sortby('y') # 现在可以正常用升序slice tif_xr_sorted.sel(y=slice(4444550, 4444560))
注意:排序后数据的空间排列会反转,需要确认结果的空间位置是否符合预期。
内容的提问来源于stack exchange,提问作者Daniel Moraes
相关产品推荐
相关产品推荐

