我有一个netcdf文件,我想使用命令行工具转换为图像(joed,png,gif).
是否有人可以帮助我使用库名称,并可能链接到它是如何完成的.
关心大卫
在这篇维基文章中写道
NetCDF用户可以创建HDF5文件
但我找到了如何实际进行这种转换的麻烦.我唯一能找到的是http://www.hdfgroup.org/HDF-FAQ.html#convnetcdf.这里写道:
有一个名为ncdf2hdf的Windows可执行程序来自Fortner Software(已解散),可进行转换.它已不再可用,但可以通过搜索网络找到.但是,据报道,它生成的HDF文件缺少一些在上述路由生成的结构中找到的结构.
我不应该在这里提到,在网上很难找到这个ncdf2hdf.
到目前为止,我发现我可以用http://gfesuite.noaa.gov/developer/netCDFPythonInterface.html或https://code.google.com/p/netcdf4-python/来使用python来读取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”,我将其反转
我最近将R和Rstudio下载到了我的电脑上.
当我尝试安装包ncdf(或任何包)时,我收到以下消息:
> install.packages("ncdf")
Installing package into ‘C:/Users/Talos/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.1/ncdf_1.6.7.zip'
Content type 'application/zip' length 358300 bytes (349 Kb)
opened URL
downloaded 349 Kb
package ‘ncdf’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\Talos\AppData\Local\Temp\RtmpKuMfwR\downloaded_packages
> load("ncdf")
Error in readChar(con, 5L, useBytes = TRUE) : cannot open the connection
In addition: Warning message:
In readChar(con, 5L, useBytes = TRUE) :
cannot open compressed file 'ncdf', probable reason 'No such file or directory' …Run Code Online (Sandbox Code Playgroud) 我的目标是从netcdf文件访问数据并以下列格式写入CSV文件.
Latitude Longitude Date1 Date2 Date3
100 200 <-- MIN_SFC values -->
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经访问了变量,将标题写入文件并填充了lat/lons.
如何访问指定的lon,lat坐标和日期的MIN_SFC值,然后写入CSV文件.
我是一个蟒蛇新手,如果有更好的方法去解决这个问题请告诉我.
NetCDF文件信息:
Dimensions:
time = 7
latitude = 292
longitude =341
Variables:
float MIN_SFC (time=7, latitude = 292, longitude = 341)
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
from netCDF4 import Dataset, num2date
filename = "C:/filename.nc"
nc = Dataset(filename, 'r', Format='NETCDF4')
print nc.variables
print 'Variable List'
for var in nc.variables:
print var, var.units, var.shape
# get coordinates variables
lats = nc.variables['latitude'][:]
lons = nc.variables['longitude'][:]
sfc= nc.variables['Min_SFC'][:]
times = nc.variables['time'][:]
# convert date, …Run Code Online (Sandbox Code Playgroud)我正在使用来自多个netcdf文件的数据(在我的计算机上的文件夹中).每个文件保存整个美国的数据,为期5年.基于x和y坐标的索引引用位置.我正在尝试为多个位置(网格单元)创建一个时间序列,将5年期间编译为20年期间(这将合并4个文件).现在,我能够从一个位置的所有文件中提取数据,并使用numpy append将其编译为数组.但是,我想提取多个位置的数据,将其放入矩阵,其中行是位置,列包含时间序列降水数据.我想我必须创建一个列表或字典,但我不确定如何在循环中将数据分配到列表/字典.
我是python和netCDF的新手,所以如果这是一个简单的解决方案,请原谅我.我一直在使用这段代码作为指南,但还没有弄清楚如何格式化它我想做的事情:Python读取多个可变大小的NetCDF Rainfall文件
这是我的代码:
import glob
from netCDF4 import Dataset
import numpy as np
# Define x & y index for grid cell of interest
# Pittsburgh is 37,89
yindex = 37 #first number
xindex = 89 #second number
# Path
path = '/Users/LMC/Research Data/NARCCAP/'
folder = 'MM5I_ccsm/'
## load data file names
all_files = glob.glob(path + folder+'*.nc')
all_files.sort()
## initialize np arrays of timeperiods and locations
yindexlist = [yindex,'38','39'] # y indices for all grid cells of …Run Code Online (Sandbox Code Playgroud) 我通过Python查看netcdf文件,netcdf文件上的日期是138276,这是自2000-01-01 00:00:00以来的小时数.这个日期对应10月7日.如何将2000-01-01 00:00:00以来的138276小时的转换日期改为2015-10-07 00:00:00?
我试图通过输入以下命令从多变量netcdf文件中提取变量:
ncks -v ta temp1.nc out.nc
Run Code Online (Sandbox Code Playgroud)
但是,然后我查看out.nc标头,所有变量仍然存在。
temp1.nc和out.nc的标头如下:
--- temp1.nc header ---
dimensions:
time = UNLIMITED ; // (124 currently)
lon = 256 ;
bnds = 2 ;
lat = 128 ;
lev = 40 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "days since 1850-1-1" ;
time:calendar = "365_day" ;
time:axis = "T" ;
double lon(lon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:axis = "X" …Run Code Online (Sandbox Code Playgroud) 因此,我正在尝试读取大量包含水文数据的相对较大的netCDF文件。NetCDF文件全部如下所示:
<xarray.Dataset>
Dimensions: (feature_id: 2729077, reference_time: 1, time: 1)
Coordinates:
* time (time) datetime64[ns] 1993-01-11T21:00:00
* reference_time (reference_time) datetime64[ns] 1993-01-01
* feature_id (feature_id) int32 101 179 181 183 185 843 845 847 849 ...
Data variables:
streamflow (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
q_lateral (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
velocity (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qSfcLatRunoff (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qBucket (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
qBtmVertRunoff (feature_id) float64 dask.array<shape=(2729077,), chunksize=(50000,)>
Attributes:
featureType: timeSeries
proj4: +proj=longlat +datum=NAD83 +no_defs
model_initialization_time: 1993-01-01_00:00:00
station_dimension: feature_id
model_output_valid_time: 1993-01-11_21:00:00
stream_order_output: …Run Code Online (Sandbox Code Playgroud)