将xarray中的变量从一个crs旋转到另一个crs

问题描述 投票:0回答:1

我有两个 xarray 数据集,每个数据集都有自己的旋转极点 crs。我需要从一个数据集中插入一个变量并将其添加到另一个数据集中。

每个数据集都有 rlat/rlon 的暗淡/坐标,以及参考 (rlat,rlon) 的 lat/lon 坐标。

ds1 = xr.Dataset(
                 data_vars=dict{var1=(["rlat", "rlon"], var1),var2=(["rlat", "rlon"], var2)),
                 coords=dict(rlat=rlat,rlon=rlon,
                             lon=(["rlat", "rlon"], lon),lat=(["rlat", "rlon"], lat))
                 )

ds2 = xr.Dataset(
                 data_vars=dict{var2=(["rlat", "rlon"], var2)),
                 coords=dict(rlat=rlat,rlon=rlon,
                             lon=(["rlat", "rlon"], lon),lat=(["rlat", "rlon"], lat))
                 )

所以我可以通过展平 lons、lats 和 var 来做到这一点,并使用

np.griddata
在两者之间插入
var1

ds1_lon = ds1.lon.values.flatten()
ds1_lat = ds1.lat.values.flatten()

ds2_lon = ds2.lon.values.flatten()
ds2_lat = ds2.lat.values.flatten()

ds1_var1 = ds1[var1].values.flatten()

ds_var1_interp = griddata((ds1_lon, ds1_lat), ds_var1, (ds2_lon, ds2_lat), method='nearest')

ds1_var1_interp = ds_var_interp.reshape(ds2.lon.shape)

ds2[var1] = xr.DataArray(ds1_var1_interp, dims=["rlat", "rlon"], coords={"rlat": ds2.rlat,
"rlon": ds2.rlon})

但是还有更好的方法吗?特别是对于我在同一坐标系中还没有纬度/经度的情况。

我有每个的crs,例如:

ds1_proj4 = '-m 57.295779506 +proj=ob_tran +o_proj=latlon +o_lat_p=-185.0 +lon_0=20.0'
ds2_proj4 = '-m 57.295779506 +proj=ob_tran +o_proj=latlon +o_lat_p=-180.0 +lon_0=10.0'

但是我尝试了 pyproj.Transform、rioxarray(仅需要 x/y)等的各种组合,但无济于事。

是否有一种有效的方法将 xarray 中的变量从一个坐标系转换到另一个坐标系并将转换后的变量添加到所需的 xarray 数据集?

python gis python-xarray coordinate-transformation
1个回答
0
投票

Rioxarray 有一个重新投影方法,可能可以满足您的需求:https://corteva.github.io/rioxarray/stable/examples/reproject.html

da2 = da.rio.reproject(target_crs)
© www.soinside.com 2019 - 2024. All rights reserved.