标签: cdo-climate

如何更改 R 中的分辨率(或重新网格)数据

我有一个数据集,由 lon、lat 和涵盖 1961 年至 1970 年的月平均变量(例如温度或降水)组成。该数据集的分辨率为 0.5 x 0.5 度经/纬度,覆盖整个地球,并以 .我使用 R 提取数据的 NC 文件:

library(ncdf)
f <- open.ncdf("D:/CRU/cru_ts3.21.1961.1970.tmp.dat.nc")
A <- get.var.ncdf(nc=f,varid="tmp")
B <- get.var.ncdf(nc=f,varid="lon")
C <- get.var.ncdf(nc=f,varid="lat")
D <- cbind(expand.grid(B, C))
E <- expand.grid(A)
Run Code Online (Sandbox Code Playgroud)

扩展网格(E)是由31,104,000行变量组成的数据表,扩展网格(D)是由259,200行经/纬度组成的数据表。如果乘以 259,200 * 10 年 * 12 个月,您将得到 31,104,000。因此,可以使用以下方法将表 E 分成每月值:

Month <- 1
Start <- (Month-1)*(259200)+1
Finish <- (Month*259200)
G <- E[Start:Finish,]
H <- expand.grid(G)
I <- cbind(D,H) 
Run Code Online (Sandbox Code Playgroud)

因此I现在是第一个月(即1961年1月)的数据表,由lon、lat和变量组成。下面给出了数据示例:

        lon    lat tmp
49184 -68.25 -55.75 7.5
49185 -67.75 -55.75 7.6
49186 -67.25 -55.75 …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation cdo-climate

5
推荐指数
1
解决办法
6472
查看次数

从 grib 天气模型中提取数据

我已经grib1GFS下载了模型数据,我使用的是 Mac OS X 并且能够wgrib2NOAA构建文件,但无法提取数据。我还没有找到grib1适用于 MAC的实用程序。

然后我运行到这个程序http://www.giss.nasa.gov/tools/panoply/能够读取文件并可以看到数据,但我有一些问题。

  1. 这些值有其他单位(如 K 表示温度,其他与降雨量的毫米不同)
  2. 我可以导出CSV但只能导出值而不是坐标

我想做的是:

  1. 通过经纬度通过命令行从grib文件中提取数据
  2. 提取数据移动到MySQL数据库,以便能够进行一些数据聚合(总和、最大值、最小值)等
  3. 能够绘制/映射数据(我可能会使用CartoDB服务)

我已经可以grib从某个地区提取或下载,我希望这些数据能够在电子表格上看到,例如纬度、经度、温度、降雨量、风等……然后我可以从那里把它带到数据库中,或 sum /avg 等或操作数据。

示例grib数据文件:https : //dl.dropboxusercontent.com/u/104462/neavilag_rain_wind_pressure.grb

根据我的情况,处理我的需求的最佳方法是什么?你能建议我怎么做吗?

mysql gis weather grib cdo-climate

5
推荐指数
2
解决办法
2729
查看次数

latcd子集的netcdf4提取

我想提取一个相当大的netcdf文件的空间子集.从Loop到netcdf文件并运行计算 - Python或R.

from pylab import *
import netCDF4

f = netCDF4.MFDataset('/usgs/data2/rsignell/models/ncep/narr/air.2m.1989.nc')
# print variables
f.variables.keys()
atemp = f.variables['air'] # TODO: extract spatial subset
Run Code Online (Sandbox Code Playgroud)

如何仅提取对应于状态(例如爱荷华州)的netcdf文件的子集.爱荷华州有以下边界拉特隆:

经度:89°5'W至96°31'W

纬度:40°36'N至43°30'N

python netcdf nco cdo-climate

5
推荐指数
3
解决办法
1万
查看次数

如何使用 R 中的双线性插值降低 netCDF 的分辨率(Regrid)?

我从这里下载了 netCDF 文件。它们的分辨率为 0.5*0.5。我想以更粗的 1*1 分辨率重新网格这些文件。我找到了一些链接。第一个链接讨论 R 中的重新网格,但不使用双线性插值。在第二个环节涉及双线性插值,但使用的气候数据运算符(到我不是很熟悉)。然后我遇到了一个 R 包HiClimR。在这个包中,一个命令 coarseR降低了数据的分辨率。我将 netCDF 文件转换为 excel 文件并使用coarseR. 但是得到结果后我发现这个命令实际上以某种方式跳过了经纬度并将分辨率降低到1 * 1。简而言之,我的问题是

(1)coarseR用于降低分辨率是否正确?(2) 如何将双线性变换用于我在 R 中的特定问题?

提前谢谢了。

r geospatial netcdf cdo-climate

5
推荐指数
1
解决办法
1480
查看次数

截断netCDF

我有一份从1850年到2005年的月平均气温的netCDF文件.如何在unix中截断文件,以便新文件的时间维度为1855 - 2005?反之亦然,截断文件,使其为1850-2000?

truncation netcdf nco cdo-climate

4
推荐指数
1
解决办法
312
查看次数

更改netCDF文件的网格大小

假设我有2个netCDF数据文件,这些数据文件具有相同区域(如南美,非洲等)的数据,但不同网格的大小分别为0.5度x 0.5度和1.0度x 1.0度。我想将其网格大小增加或减少到另一个值,例如0.25 x 0.25或1.0 x 1.0,以便可以轻松地将其用于栅格计算和比较等。

是否有使用任何bash脚本,CDO等执行此操作的方法?

可以从此处下载示例数据。https://www.dropbox.com/sh/0vdfn20p355st3i/AABKYO4do_raGHC34VnsXGPqa?dl

可以采用诸如双线性插值或三次插值的不同方法吗?使用ArcGIS和其他软件,这非常容易,但是有一种方法可以对包含大型数据集的大型netCDF文件进行处理。假设这只是数据的一个子集。我稍后将转换的是一组完整的年度数据。

结果文件应为.nc文件,其用户定义的网格大小会更改。

bash netcdf python-3.x netcdf4 cdo-climate

4
推荐指数
2
解决办法
390
查看次数

如何更改 NetCDF 中的经度范围

我的 NetCDF 文件有 4 个维度(经度、纬度、时间、水平压力)和几个变量。

我想用 [-20 -18 -16 ... -2 0 2 4 ... 18 20] 替换 [340 342 344 ... 360 0 2 4 ... 18 20] 的经度数据。事实上,经度是从 0° 到 360° 计算的,但我需要从 -180° 到 180°。

我在互联网上找到了一些想法,但我不知道如何应用它们。

这里有一个解释:

“一些 netcdf 文件包含严格的正值 [0,360],这与 gdal/QGis 处理经度值的方式不兼容 - 它们不会环绕日期变更线。这也会导致 gdalwarp 以及与其他数据集([-180,180 ] 值),由于 180 度经度偏移,它们没有正确对齐。

简单的解决方法是测试经度变量并将 [180,360] 间隔中的任何值通过减去 180 转换为 [-180,180] - 在 IReadBlock 和 SRS 检测中。”

我也读过“gdal-translate”,但我不知道如何使用它。

编辑:我的纬度也有问题,它是 N -> S(我想要它 S -> N),由于“cdo invertlat”,我将其反转

replace r projection netcdf cdo-climate

3
推荐指数
2
解决办法
3922
查看次数

将低于阈值的值设置为 netcdf 文件中的阈值

我想在 netcdf 文件中将常量c以下的所有值设置为c本身:file.nc

使用气候数据运营商 (CDO) 的解决方案是

cdo mul -gec,$c file.nc file.nc t1.nc
cdo add -mulc,$c -ltc,$c file.nc t1.nc output.nc
rm -f t1.nc
Run Code Online (Sandbox Code Playgroud)

但是有没有更简洁/更短的方法来做到这一点?

bash netcdf nco cdo-climate

3
推荐指数
3
解决办法
2933
查看次数

我应该如何使用 CDO Selyear?我得到的输出文件大四倍

CDO 似乎对我来说工作得很好,直到我遇到了这个。我有一个从 2101 年到 2228 年的每日数据的 netcdf,并且我想获取一个仅包含从 2101 年到 2227 年的年份的文件,所以我运行:

cdo selyear,2101/2227 in.nc out.nc
Run Code Online (Sandbox Code Playgroud)

但输出文件的内存大小是输入文件的四倍多!它似乎具有正确的时间步数,并且初始日期和结束日期都是正确的。另外,纬度和经度似乎与输入相同,所以我想知道为什么文件大小如此。

netcdf netcdf4 cdo-climate

3
推荐指数
1
解决办法
5838
查看次数

使用 CDO 计算 ERA5 每日总降水量

本质上,这是这个问题的转帖:https ://confluence.ecmwf.int/pages/viewpage.action?pageId =149341027

我已经从 CDS 下载了 ERA5。对于从每个考虑年份的 1 月 1 日到 12 月 31 日的每个日历日,输入文件具有 24 小时步长(0、1、2、3、4、...、23)。

ECMWF 在此声明https://confluence.ecmwf.int/display/CKB/ERA5%3A+How+to+calculate+daily+total+precipitation必须通过累加 1979 年 1 月 1 日的降水来计算每日总降水量1 月 1 日的第 1、2、...、23 步和 1 月 2 日的第 0 步。这意味着 1979 年 1 月 1 日的第 0 步不包括在当天的总降水量计算中。为了计算 1979 年 1 月 2 日的总降水量,我们还使用当天的步骤 1、2、3、...、23 加上 1 月 3 日的步骤 0,依此类推。

在 python 中似乎有一个选项可以这样做:

import xarray as xr                                                    # import xarray library
ds_nc = xr.open_dataset('name_of_your_file.nc')                        # read the file
daily_precipitation = …
Run Code Online (Sandbox Code Playgroud)

python weather netcdf cdo-climate era5

3
推荐指数
1
解决办法
2337
查看次数