标签: cdo-climate

如何使用R中的纬度/经度边界从netCDF文件中获取子集

我有一个netCDF文件,我想从纬度/经度边界定义一个子集(即一个纬度/经度定义的框),使用R中的'ncdf'包.

我的netCDF文件摘要如下.它有两个维度(纬度和经度)和1个变量(10U_GDS4_SFC).它本质上是一个包含风值的纬度/长度网格:

[1] "file example.nc has 2 dimensions:"
[1] "lat_0   Size: 1280"
[1] "lon_1   Size: 2560"
[1] "------------------------"
[1] "file example.nc has 1 variables:"
[1] "float 10U_GDS4_SFC[lon_1,lat_0]  Longname:10 metre U wind component Missval:1e+30"
Run Code Online (Sandbox Code Playgroud)

纬度变量从+90到-90运行,经度变量从0到360运行.

我希望使用以下地理边界边界提取整个网格的子集:

左下角:Lat:34.5˚,长:355˚,左上角:Lat:44.5˚,长:355˚,右上角:Lat:44.5˚,长:12˚,右下角:Lat:34.5˚ ,长:12˚

我知道可以使用get.var.ncdf()命令提取变量的一部分(下面的例子):

z1 = get.var.ncdf(example.nc, "10U_GDS4_SFC", start=c(11,26), count=c(5,5))
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何合并纬度/经度,以便最终得到包含变量值的子集空间网格.我不熟悉使用R中的netCDF值,我们将非常感谢您的建议.非常感谢!

r subset latitude-longitude netcdf cdo-climate

10
推荐指数
2
解决办法
1万
查看次数

GDAL中可能存在错误?

给定此文件:

http://mtarchive.geol.iastate.edu/2019/02/18/mrms/ncep/GaugeCorr_QPE_01H/GaugeCorr_QPE_01H_00.00_20190218-150000.grib2.gz

…根据我使用的软件,我得到不同的输出。

wgrib2 2019021815.grib2 -csv wgrib2.csv
Run Code Online (Sandbox Code Playgroud)

cdo outputtab,date,time,lat,lon,value 2019021815.grib2 > cdo.txt
Run Code Online (Sandbox Code Playgroud)

两种输出:

-3 (undefined) :  8,869,250 records
0              : 14,848,865 records
Other values   :    781,885 records
___________________________________
Total          : 24,500,000 records
Run Code Online (Sandbox Code Playgroud)

然而:

gdal_translate.exe -of xyz 2019021815.grib2 gdal.csv
Run Code Online (Sandbox Code Playgroud)

-3所有24,500,000条记录的输出。

如果使用Python + GDAL解析文件,则会得到相同的结果。

这是GDAL中的错误吗?我希望能够使用Python解析这些文件。


我正在将Windows用于wgrib2,可以从ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/Windows_7/下载该文件

我还在将Windows用于GDAL,可以从https://gdal.org/download.html下载。

我正在使用Linux for CDO,可以从https://code.mpimet.mpg.de/projects/cdo/下载

python gdal grib cdo-climate

7
推荐指数
2
解决办法
190
查看次数

使用 cdo 将通用网格类型转换为 lonlat 网格类型

我目前正在尝试使用一个 NetCDF 文件(可以从https://doi.pangaea.de/10.1594/PANGAEA.828650下载的开源数据)从该数据集中提取特定纬度(https://www.nodc .noaa.gov/archive/arc0105/0160558/3.3/data/0-data/spco2_1982-2015_MPI_SOM-FFN_v2016.nc,再次开源)。

第一个数据集是全球海洋中被称为生物群落的定义区域,我已成功从该区域中提取了覆盖标记为 16 和 17 的生物群落的区域。

该数据集具有以下网格类型:

gridtype  = generic
gridsize  = 64800
xsize     = 180
ysize     = 360
xname     = lat
xunits    = "degrees latitude"
yname     = lon
yunits    = "degrees longitude"
xfirst    = -89.5
xinc      = 1
yfirst    = -179.5
yinc      = 1
Run Code Online (Sandbox Code Playgroud)

第二种网格类型是海洋碳通量的全球数据集(参数:fgco2_raw),我希望从 Time_Varying_Biomes.nc 中生物群落 16 和 17 定义的区域中提取值。

此数据集 spco2_1982-2015_MPI_SOM-FFN_v2016.nc 具有以下网格类型:

gridtype  = lonlat
gridsize  = 64800
datatype  = float
xsize     = 360
ysize     = 180
xname     = lon
xlongname …
Run Code Online (Sandbox Code Playgroud)

netcdf4 cdo-climate

7
推荐指数
1
解决办法
8385
查看次数

从 NETCDF 文件中提取数据的有效方法

我有许多坐标(大约 20000 个),我需要从许多 NetCDF 文件中提取数据,每个文件大约有 30000 个时间步长(未来的气候情景)。使用此处的解决方案效率不高,原因是每个 i,j 将“dsloc”转换为“dataframe”所花费的时间(请查看下面的代码)。** 可以从此处下载 NetCDF 文件示例**

import pandas as pd
import xarray as xr
import time

#Generate some coordinates
coords_data = [{'lat': 68.04, 'lon': 15.20, 'stid':1},
    {'lat':67.96, 'lon': 14.95, 'stid': 2}]
crd= pd.DataFrame(coords_data)
lat = crd["lat"]
lon = crd["lon"]
stid=crd["stid"]

NC = xr.open_dataset(nc_file)
point_list = zip(lat,lon,stid)
start_time = time.time()
for i,j,id in point_list:
    print(i,j)
    dsloc = NC.sel(lat=i,lon=j,method='nearest')
    print("--- %s seconds ---" % (time.time() - start_time))
    DT=dsloc.to_dataframe()
    DT.insert(loc=0,column="station",value=id)
    DT.reset_index(inplace=True)
    temp=temp.append(DT,sort=True)
    print("--- …
Run Code Online (Sandbox Code Playgroud)

python netcdf nco python-xarray cdo-climate

7
推荐指数
1
解决办法
2535
查看次数

将 grib 转换为 netcdf 文件

有没有办法在 Windows 上将 grib 文件转换为 NetCDF 格式?
我使用了一个名为的软件,tkdegrib但它通过一个参数捕获一个参数,而我希望所有 grib 的参数都在同一个文件中。不幸的是,我不能使用 Linux。

netcdf grib cdo-climate

6
推荐指数
1
解决办法
7063
查看次数

有没有办法裁剪NETCDF文件?

想象一下,您有一个文件example.nc,其风力数据定义在90N,90S,180E,180W区域.无论如何我可以在linux中使用简单的nc类型命令(不用在matlab/python中提取数据来重写),裁剪此文件以包含一个较小的区域,上面的子集.

例如,30N,10S,60E和30W.

linux netcdf nco cdo-climate

6
推荐指数
2
解决办法
4696
查看次数

如何计算bash中netcdf文件中随时间维度求和的缺失值数量

我有一个 netcdf 文件,其中的数据是 lon、lat 和 time 的函数。我想计算在时间维度上求和的每个网格单元中缺失条目的总数,最好使用 CDO 或 NCO,因此我不需要调用 R、python 等。

我知道如何获得缺失值的总数

ncap2 -s "nmiss=var.number_miss()" in.nc out.nc
Run Code Online (Sandbox Code Playgroud)

正如我对这个相关问题的回答: count number of missing values in netcdf file - R

并且 CDO 可以告诉我空间总和

cdo info in.nc
Run Code Online (Sandbox Code Playgroud)

但我不知道如何随着时间的推移求和。例如,有没有一种方法可以指定要在 ncap2 中使用 number_miss 求和的维度?

bash netcdf missing-data nco cdo-climate

6
推荐指数
1
解决办法
1067
查看次数

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万
查看次数

如何将旋转的NetCDF转换回正常纬度/长度?

我有一个旋转坐标的NetCDF文件.我需要将它转换为普通的纬度/经度坐标(长度为-180到180,纬度为-90到90).

library(ncdf4)
nc_open('dat.nf')
Run Code Online (Sandbox Code Playgroud)

对于尺寸,它显示:

[1] "     5 variables (excluding dimension variables):"
[1] "        double time_bnds[bnds,time]   "
[1] "        double lon[rlon,rlat]   "
[1] "            long_name: longitude"
[1] "            units: degrees_east"
[1] "        double lat[rlon,rlat]   "
[1] "            long_name: latitude"
[1] "            units: degrees_north"
[1] "        char rotated_pole[]   "
[1] "            grid_mapping_name: rotated_latitude_longitude"
[1] "            grid_north_pole_longitude: 83"
[1] "            grid_north_pole_latitude: 42.5"
[1] "        float tasmax[rlon,rlat,time]   "
[1] "            long_name: Daily Maximum Near-Surface Air Temperature"
[1] "            standard_name: air_temperature"
[1] "            units: K" …
Run Code Online (Sandbox Code Playgroud)

r rotation coordinates netcdf cdo-climate

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

如何使用 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
查看次数