如何使用 rioxarray 将波段添加到 xarray 数据集

How to add a band to xarray dataset using rioxarray

我有两个数据集,都是栅格,我想将它们合并为 1 个栅格。这应该不难,但我很难过。两者都有相同的 extent/resolution 等。一个栅格有 231 个波段,另一个栅格有 1 个波段。我想创建一个包含 232 个波段的栅格。以下是关于两个栅格的一些信息。

我一直在研究 merge_datasets() 命令,但还没有成功。有什么线索吗?

<xarray.DataArray (band: 231, y: 1234, x: 1234)>
array([[[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        ...,
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]],

       [[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        ...,
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]],

       [[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        ...,
...
        ...,
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]],

       [[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        ...,
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]],

       [[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        ...,
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]]])
Coordinates:
  * y            (y) float64 39.01 39.02 39.02 39.02 ... 39.34 39.34 39.34 39.34
  * x            (x) float64 -118.8 -118.8 -118.8 ... -118.4 -118.4 -118.4
  * band         (band) int32 1 2 3 4 5 6 7 8 ... 225 226 227 228 229 230 231
    spatial_ref  int32 0
Attributes:
    scale_factor:  1.0
    add_offset:    0.0


<xarray.DataArray (y: 1234, x: 1234)>
array([[ 2.55955   ,  2.55955   ,  2.55955   , ..., 26.846706  ,
        19.290512  , 18.555965  ],
       [ 1.511336  ,  1.193543  ,  1.511336  , ..., 20.782856  ,
        16.041739  , 21.056656  ],
       [ 1.1935476 ,  0.        ,  0.        , ..., 10.154096  ,
        11.940413  , 17.73191   ],
       ...,
       [ 3.029245  ,  3.029245  ,  1.1990428 , ...,  5.2065864 ,
         3.027078  , 27.63241   ],
       [ 0.        ,  1.5156854 ,  2.2077734 , ...,  5.1539397 ,
         4.5386004 , 19.661118  ],
       [ 1.8543341 ,  0.92740995,  0.92740995, ...,  5.1539497 ,
         3.7047918 , 13.450604  ]], dtype=float32)
Coordinates:
  * y            (y) float64 39.01 39.02 39.02 39.02 ... 39.34 39.34 39.34 39.34
  * x            (x) float64 -118.8 -118.8 -118.8 ... -118.4 -118.4 -118.4
    band         int32 1
    spatial_ref  int32 0
Attributes:
    scale_factor:  1.0
    add_offset:    0.0
    long_name:     slope

您正在寻找 concatenate along the dimension band,但问题是您的第二个数组已经包含 band 作为(长度 0)坐标并且它与您的第一个数组冲突.

试试这个 xr.concat, da.reset_coords, and da.expand_dims 的组合:

xr.concat(
    [
        raster_1,
        raster_2.reset_coords('band', drop=True).expand_dims(band=[232]),
    ], dim='band',
)