如何使用 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',
)
我有两个数据集,都是栅格,我想将它们合并为 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',
)