次のコードは、nomadサーバーから温度データを取得し、このデータを3次元(時間、緯度、経度)でnetcdfファイルを生成します。それは、この場合のエラー報告では< 0とXMAX> 0をXMINとき以外は正常に動作します:Netcdf generator python
Traceback (most recent call last): File "./make_basic.py", line 79, in tmpvar[:]=var[0,xmin:xmax,ymin:ymax] File "netCDF4/_netCDF4.pyx", line 3695, in netCDF4._netCDF4.Variable.getitem (netCDF4/_netCDF4.c:38039)
File "netCDF4/_netCDF4.pyx", line 4376, in netCDF4._netCDF4.Variable._get (netCDF4/_netCDF4.c:47286) RuntimeError: NetCDF: DAP server error
XMIN < 0とXMAX < 0、またはその両方がゼロよりも大きい場合には、それが正常に動作します。誰が何が失敗しているかも知っていますか?例えば、0からグリニッジの子午線であるため、負の座標から正の座標へのヨーロッパのnetcdfを行うことが重要です。
#! /usr/bin/python
import netCDF4
import numpy as np
import sys
dods='http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25_1hr/gfs20170928/gfs_0p25_1hr_00z'
newfile='sdffile.nc'
xmin=-100
xmax=100
ymin=448
ymax=649
cdata=netCDF4.Dataset(dods,'r')
lon=cdata.variables['lon']
lat=cdata.variables['lat']
time=cdata.variables['time']
var=cdata.variables['tmp2m']
## Set Some Globals
newdata=netCDF4.Dataset(newfile,'w')
newdata.title="GFS"
newdata.Conventions="COARDS"
newdata.dataType='Grid'
newdata.history='Example Self Describing NetCDF File From GrADS-Aholic'
newdata.createDimension('lat', len(lat[ymin:ymax]))
newdata.createDimension('lon', len(lon[xmin:xmax]))
newdata.createDimension('time', 1)
### Create dimensional variables: ###
### For dimension variables, COARDS attributs are required for GrADS self describing
### Do latitude (f8 = float64):
latvar=newdata.createVariable('lat','f8',('lat'))
latvar.grads_dim='y'
latvar.grads_mapping='linear'
latvar.grads_size=len(lat[ymin:ymax])
latvar.units='degrees_north'
latvar.long_name='latitude'
latvar.minimum=str(lat[ymin])
latvar.maximum=str(lat[ymax])
latvar.resolution='0.25'
latvar[:]=lat[ymin:ymax]
### Do longitude (f8 = float64):
lonvar=newdata.createVariable('lon','f8',('lon'))
lonvar.grads_dim='x'
lonvar.grads_mapping='linear'
lonvar.grads_size=len(lon[xmin:xmax])
lonvar.units='degrees_east'
lonvar.long_name='longitude'
lonvar.minimum=str(lon[xmin])
lonvar.maximum=str(lon[xmax])
lonvar.resolution='0.25'
lonvar[:]=lon[xmin:xmax]
### Do Time (f8 = float64):
### Added grads_min and grads_step to attributes
timevar=newdata.createVariable('time','f8',('time'))
timevar.grads_dim='t'
timevar.grads_mapping='linear'
timevar.grads_size=1
timevar.units='days since 1-1-1 00:00:0.0'
timevar.grads_min='00z30dec2015'
timevar.grads_step='3hr'
timevar.long_name='time'
timevar.minimum='00z30dec2015'
timevar.maximum='00z31dec2015'
timevar.resolution='0.125'
timevar[:]=time[0]
### Now that dimensional variables are finished, the other variables are written
### 2 meter temperature (f4=float32) ###
tmpvar=newdata.createVariable('TMP','f4',('time','lat','lon'),fill_value=9.999E20)
tmpvar.long_name='2 Meter Temperature'
tmpvar.units='K'
tmpvar[:]=var[0,xmin:xmax,ymin:ymax]
print 'Done with 2 meter Temperature!'
newdata.close()
cdata.close()
sys.exit()