我想创建一个netCDF文件,其中存储了几个变量及其关联的坐标,以及一个空的char变量,该变量可用于存储各种投影元数据。
我已经尝试过了:
import xarray as xr
import numpy as np
#example variable
A=np.array([[1,2],[3,4]])
#example coords
x=np.array([10,20])
y=np.array([30,40])
#example netcdf creation with xarray
data_vars={'A':(['y','x'],A),
'projection':np.str()}
coords={'x':x,
'y':y}
dataset = xr.Dataset(data_vars=data_vars, coords=coords)
dataset['projection'].attrs['EPSG']='3413'
dataset.to_netcdf('path/to/file.nc')
这种方法将'projection'变量保存为char类型,但同时也为其分配了一个空字符串:
<xarray.Dataset>
Dimensions: (x: 2, y: 2)
Coordinates:
* y (y) int64 30 40
* x (x) int64 10 20
Data variables:
A (y, x) int64 1 2 3 4
projection |S1 ''
如何使用xarray创建“投影”变量,使其只是一个空的存储变量,类型为char(在此表示为| S1),并且没有尺寸?
任何帮助将不胜感激。
答案 0 :(得分:0)
TL; DR:我还没有发表评论的名声,只能部分解决此问题,因为to_netcdf
强制将维度分配给变量。
我对这个问题(同一个问题,为CRS设置了一个变量)走得更远:
data_vars = {
'A':(['y','x'],A),
'crs': np.array(b'', dtype='|S1')
}
其中|S1
是单字节字符串的numpy数据类型。它在Python 3中的用法是discouraged,但是看来xarray.open_dataset
正是以这种方式读取了已使用GDAL设置了CRS的netCDF,所以我尝试将其复制。使用to_netcdf
写回时,一切似乎都很好-但ncdump -h
向我展示了我的crs变量被分配了先前不存在的维度string1
:
$ ncdump -h impact.nc
[truncated]
char crs(string1) ;
crs:inverse_flattening = 298.257223563 ;
crs:spatial_ref = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS…"
[truncated]
我认为我将通过从Python调用gdal_translate
来添加CRS来解决解决该问题。