簡體   English   中英

rioxarray(或xarray)在使用to_netcdf重新投影和保存后將spatial_ref坐標轉換為變量?

[英]rioxarray (or xarray) converts spatial_ref coordinate to variable after reprojecting and saving with to_netcdf?

我有一個“dataarray”,我正在嘗試使用 rioxarray 重新投影它。 但是,當我使用 xarray.to_netcdf 重新投影后,保存的文件是一個數據集,其中“spatial_ref”坐標轉換為變量。 我不確定是 xarray 還是 rioxarray.reprojection 導致了這種行為。 以下是一些顯示問題的代碼:

import xarray as xr 
import rioxarray
from pyproj import CRS 

lst = xr.open_dataset("lst.nc") # File which carries the original CRS
luc = xr.open_rasterio("luc.tif") # File with the desired projection system
file_to_reproject = xr.open_dataarray("myfile.nc") # File to reproject

cc_lst = CRS.from_cf(lst.crs.attrs) # Get the CRS 
cc_luc = luc.rio.crs

file_to_reproject = file_to_reproject.rio.write_crs(cc_lst) # write crs 
file_reprojected= file_to_reproject.rio.reproject(cc_luc) #reproject the file

print(file_reprojected)
<xarray.DataArray (season: 4, y: 4343, x: 4172)>
array([[[nan, nan, nan, ..., nan, nan, nan],
        [nan, nan, nan, ..., nan, nan, nan]]])
Coordinates:
  * x            (x) float64 -3.382e+06 -3.381e+06 ... 4.817e+05 4.826e+05
  * y            (y) float64 5.361e+06 5.36e+06 ... 1.338e+06 1.337e+06
  * season       (season) object 'DJF' 'JJA' 'MAM' 'SON'
    spatial_ref  int64 0

# however after saving the file and reloading it I get a dataset where 
# spatial_ref turned into variable 
file_reprojected.to_netcdf("file_reprojected.nc")
ds= xr.open_dataset("file_reprojected.nc")

>>> print(ds)
<xarray.Dataset>
Dimensions:                        (season: 4, x: 4172, y: 4343)
Coordinates:
  * x                              (x) float64 -3.382e+06 ... 4.826e+05
  * y                              (y) float64 5.361e+06 5.36e+06 ... 1.337e+06
  * season                         (season) object 'DJF' 'JJA' 'MAM' 'SON'
Data variables:
    spatial_ref                    int64 ...
    __xarray_dataarray_variable__  (season, y, x) float64 ...

# Here is the content of spatial_ref
>>> print(ds["spatial_ref"])
<xarray.DataArray 'spatial_ref' ()>
array(0)
Attributes: (12/19)
    crs_wkt:                        PROJCS["unknown",GEOGCS["unknown",DATUM["...
    semi_major_axis:                6378137.0
    semi_minor_axis:                6356752.314140356
    inverse_flattening:             298.257222101
    reference_ellipsoid_name:       GRS 1980
    longitude_of_prime_meridian:    0.0
    ...                             ...

正如您在重新投影數據數組並將其保存后所看到的那樣,文件變成了以 spatial_ref 作為新變量的數據集。

我只對地理參考數據數組感興趣。 我怎樣才能解決這個問題?

編輯1

我認為它可能與這個( here )問題有關

編輯2

我在導入重新投影的文件時忘記提及沒有crs:

ds= xr.open_dataset("file_reprojected.nc")
ds.rio.crs # Retruns nothing 

問題是我在使用 xarray.open_dataarray 時沒有設置 decode_coords="all"。 有了以下一切看起來都很好:

file_to_reproject = xr.open_dataarray("myfile.nc",decode_coords="all") 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM