Source code for PseudoNetCDF.camxfiles.landuse.Write

from __future__ import unicode_literals
import numpy as np
from PseudoNetCDF._getwriter import registerwriter


[docs] def ncf2landuse(ncffile, outpath): nland = len(ncffile.dimensions['LANDUSE']) nrows = len(ncffile.dimensions['ROW']) ncols = len(ncffile.dimensions['COL']) newstyle = getattr(ncffile, '_newstyle', True) dt3dfmt = '(%d, %d, %d)>f' % (nland, nrows, ncols) dt2dfmt = '(%d, %d)>f' % (nrows, ncols) if newstyle: _fland_dtype = np.dtype(dict(names=['SPAD1', 'KEY', 'EPAD1', 'SPAD2', 'DATA', 'EPAD2'], formats=['>i', '8>S', '>i', '>i', dt3dfmt, '>i'])) _other_dtype = np.dtype(dict(names=['SPAD1', 'KEY', 'EPAD1', 'SPAD2', 'DATA', 'EPAD2'], formats=['>i', '8>S', '>i', '>i', dt2dfmt, '>i'])) else: _fland_dtype = np.dtype(dict(names=['SPAD2', 'DATA', 'EPAD2'], formats=['>i', dt3dfmt, '>i'])) _other_dtype = np.dtype(dict(names=['SPAD2', 'DATA', 'EPAD2'], formats=['>i', dt2dfmt, '>i'])) outfile = open(outpath, 'wb') keys = [key for key in ['FLAND', 'VAR1', 'LAI', 'TOPO', 'LUCAT11', 'LUCAT26'] if key in ncffile.variables.keys()] ludts = {'FLAND': _fland_dtype, 'LUCAT11': _fland_dtype, 'LUCAT26': _fland_dtype} def getempty(key): return np.empty(shape=(1,), dtype=ludts.get(key, _other_dtype)) keyandvar = [(key, getempty(key)) for key in keys] for key, var in keyandvar: invar = ncffile.variables[key] if newstyle: if key == 'FLAND'.strip(): key = 'LUCAT%02d' % nland var['SPAD1'] = 8 var['KEY'] = key.ljust(8) var['EPAD1'] = 8 var['SPAD2'][...] = invar.size * 4 var['DATA'][...] = invar[:] var['EPAD2'][...] = invar.size * 4 var.tofile(outfile) outfile.flush() return outfile
registerwriter('camxfiles.landuse', ncf2landuse) registerwriter('landuse', ncf2landuse)