【问题标题】:Create an empty netCDF4 char variable using python xarray使用 python xarray 创建一个空的 netCDF4 char 变量
【发布时间】:2020-01-09 22:24:23
【问题描述】:

我想创建一个 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)且没有维度的空存储变量?

任何帮助将不胜感激。

【问题讨论】:

    标签: python char netcdf python-xarray


    【解决方案1】:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-23
      • 2015-12-14
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2016-04-27
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多