从xarray数据集创建NetCDF时,纬度经度错误

时间:2019-07-19 21:46:25

标签: netcdf qgis python-xarray

我想用xarray创建一个NetCDF文件,并尝试了解有关“创建数据集” here的文档。

这是示例中的代码(将ds保存到NetCDF):

import xarray as xr
import numpy as np
import pandas as pd

temp = 15 + 8 * np.random.randn(2, 2, 3)
precip = 10 * np.random.rand(2, 2, 3)
lon = [[-99.83, -99.32], [-99.79, -99.23]]
lat = [[42.25, 42.21], [42.63, 42.59]]

ds = xr.Dataset({'temperature': (['x', 'y', 'time'],  temp),
                 'precipitation': (['x', 'y', 'time'], precip)},
                coords={'lon': (['x', 'y'], lon),
                        'lat': (['x', 'y'], lat), 
                        'time': pd.date_range('2014-09-06', periods=3),
                        'reference_time': pd.Timestamp('2014-09-05')})

ds.to_netcdf('C:\\Temp\\test.nc')

从上面的示例中,我希望得到一个具有两个变量(温度,降水)和三个维度(x,y,时间)的NetCDF。我希望尺寸尺寸在x方向上为2,在y方向上为2,在时间方向上为3。根据@Bart的测试(评论),NetCDF就是这种情况。 因此,在QGIS 3.4(EPSG 4326)中打开NetCDF'temp'或'precip'变量时,我希望NetCDF数据为:

  • 由2x2网格(“ x-y”方向)制成
  • 具有3个时间步长(“时间”或“ z”方向)
  • 位于用于创建数据集的纬度上

相反,数据是:

  • 由2x3网格组成
  • 具有2个波段(而不是三个时间步长)
  • 位于纬度/经度0/0,每个像元大1度:

请找到NetCDF here的可视化。红色方块用温度阴影的蓝色阴影标记六个单元格,左上角的经度/纬度(0/0)和两个“带”

因此,看来xarray NetCDF数据格式不同于该格式的QGIS解释。 有人可以编辑该示例,以使其在QGIS中的“正确”位置生成2x2网格,或者为我提供一个简单示例,以从xarray数据集创建正确的地理参考NetCDF?

1 个答案:

答案 0 :(得分:0)

我必须交换尺寸的顺序,并且必须摆脱嵌套的纬度表才能起作用。在此处将xarray示例修改为此代码即可:

import xarray as xr
import numpy as np
import pandas as pd

temp = 15 + 8 * np.random.randn(3, 3, 2)  # time, y, x
precip = 10 * np.random.rand(3, 3, 2)  # time, y, x
lat = [100, 101, 102]
lon = [10, 11]

ds = xr.Dataset({'temperature': (['time', 'y', 'x'],  temp),
                 'precipitation': (['time', 'y', 'x'], precip)},
                coords={'x': (['x'], lon),
                        'y': (['y'], lat),
                        'time': pd.date_range('2014-09-06', periods=3)})

ds.to_netcdf('C:\\Temp\\test_xarray.nc')

请注意,我已将问题的“ 2x2网格”更改为“ 2x3网格”,以确保创建NetCDF时x-y的顺序重要。

相关问题