当前位置: 首页 > 知识库问答 >
问题:

从x数组数据集创建NetCDF时纬度经度错误

松德曜
2023-03-14

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

下面是示例中的代码(将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数据为:

    < li >由2x2网格组成(' x-y '方向) < li >具有3个时间步长(“时间”或“z”方向) < li >位于用于创建数据集的经纬度位置

相反,数据是:

    < li >由2x3网格制成 < li >使用两个波段(而不是三个时间步长) < li >位于纬度/经度0/0,每个单元格大1度:

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

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

共有1个答案

鞠鸿雪
2023-03-14

我不得不交换尺寸的顺序,我必须摆脱嵌套的纬度列表才能正常工作。在此处将 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 的顺序很重要。

 类似资料:
  • 我正在下载netcdf格式的气候数据。对于每个变量(例如“降水量”),我需要合并9个netcdf,每个都属于一个独特的气候模型。每个netcdf具有相同的大小(time、lat、lon)。如何将9个3D netcdf合并为一个4D netcdf?最后,我想计算每月的累积降水量。这是我的当前代码: 上面的代码有效,但我正在创建一个大的3D netcdf,而不是一个仍然包含气候模型名称的4D。以下代码

  • 我试图从这个结果页面的“Show Map”按钮中刮出纬度和经度数据:https://www.psychologytoday.com/us/therapists/60148/374863?sid=5d01e84909804&ref=2&tr=resultsName:https://www.psychologytoday.com/us/therapists/60148/374863?sid=5d01e

  • 问题内容: 我正在使用SQL Server 2008数据库的应用程序上工作。在此数据库中,我有一个名为Session的表,该表具有两个字段经度和纬度,用于指示用户的位置。在另一个名为Zone的表上,我有一个area属性,它是几何类型的。如何检查用户的经度和纬度坐标是否属于某个几何? 谢谢 问题答案: 您有一个将几何形状存储在欧几里得几何形状中的几何图形,并且想要将地球上由纬度和经度表示的点与之相关

  • 我使用paleoview软件从过去的气候中下载了一些变量,包括15000BP-10000BP的平均温度(我可以根据要求上传文件,但至少是GB)。 主要问题是,当我读取光栅时,它只包含正纬度和正经度。我从文章中知道,这有一个2.5*2.5的分辨率。 我加载了光栅和ncdf4库,以使用光栅读取它 当我使用以下代码阅读时 我得到以下信息 正如你所看到的,范围只是正的,但我知道它有整个世界的数据,当我绘制

  • 我有一个 netCDF 文件,我希望使用 R 中的“ncdf”包从由纬度/经度边界定义的子集(即经纬度/经度定义的框)中提取子集。 下面是我的netCDF文件的摘要。它有两个维度(纬度和经度)和一个变量(10U_GDS4_SFC)。它本质上是一个包含风值的平面/长网格: 纬度变量从 90 到 -90,经度变量从 0 到 360。 我希望使用以下地理角边界提取整个网格的子集: 左下角:纬度:34.5

  • 之前已经回答了一个类似的问题,但是我找不到这个问题的解决方案: 我有一个带有辐照度值的.txt,我想在 csv 文件中提取特定纬度和纬度的辐照度值的时间系列。.txt文件的(头部)如下所示: 该文件没有lon和lat列(这将是提取数据的简单方法)。然而,它有一个标题,如:NCOLS、NROWS、XLLCORNER、…但是我不知道如何提取像这样的文件的lat/长时间序列。 此外,一旦提取了特定lat