-
Ann-Kathrin Margarete Edrich authoredAnn-Kathrin Margarete Edrich authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ncfile_generation.py 4.73 KiB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import netCDF4 as nc
import settings
def generate_basic_ncfile(outfile, crs=None):
"""
Initialise basic netCDF4 file
Input:
Outfile: path to store the netcdf file, string
crs: coordinate reference system, string
"""
# If outfile exists already, delete
if os.path.exists(outfile):
os.remove(outfile)
ds = nc.Dataset(outfile, 'w', format='NETCDF4')
return ds
def generate_ncfile(outfile, x, y, data, crs=None,
data_unit=None, missing_value=settings.no_value):
"""
Save 2D dataset as netCDF4 file
Input:
Outfile: path to store the netcdf file, string
x: longitude vector, list
y: latitude vector, list
data: 2D data array
crs: coordinate reference system, string
data_unit: data unit, string
missing_value: no data value, integer or float
"""
# If outfile exists already, delete
if os.path.exists(outfile):
os.remove(outfile)
ds = nc.Dataset(outfile, 'w', format='NETCDF4')
ds.createDimension('lon', len(x))
ds.createDimension('lat', len(y))
longitude = ds.createVariable('Longitude', 'f4', 'lon')
latitude = ds.createVariable('Latitude', 'f4', 'lat')
result = ds.createVariable('Result', 'f4', ('lat', 'lon'))
longitude[:] = x
latitude[:] = y
result[:, :] = data
# Provide global information in output-file
if crs is not None:
longitude.units = crs
latitude.units = crs
if data_unit is not None:
result.units = data_unit
ds.missing_value = missing_value
ds.close()
def generate_3dncfile(outfile, x, y, data, dim, features, crs='wgs84',
data_unit=None, missing_value=settings.no_value):
"""
Save 3D dataset as netCDF4 file, e.g. data cube
Input:
Outfile: path to store the netcdf file, string
x: longitude vector, list
y: latitude vector, list
dim: number of 2D datasets, integer
data: 2D data array
features: contained features in prediction dataset, list of chars
crs: coordinate reference system, string
data_unit: data unit, string
missing_value: no data value, integer or float
"""
# If outfile exists already, delete
if os.path.exists(outfile):
os.remove(outfile)
ds = nc.Dataset(outfile, 'w', format='NETCDF4')
ds.createDimension('lon', len(x))
ds.createDimension('lat', len(y))
ds.createDimension('dim', dim)
ds.createDimension('feat', len(features))
longitude = ds.createVariable('Longitude', 'f4', 'lon')
latitude = ds.createVariable('Latitude', 'f4', 'lat')
result = ds.createVariable('Result', 'f4', ('lat', 'lon', 'dim'))
Features = ds.createVariable('features', 'S1', 'feat')
longitude[:] = x
latitude[:] = y
result[:, :, :] = data
Features[:] = features
# Provide global information in output-file
if crs is not None:
longitude.units = crs
latitude.units = crs
if data_unit is not None:
result.units = data_unit
ds.missing_value = missing_value
ds.close()
def generate_2dncfile(outfile, x, y, data, features, crs='wgs84',
data_unit=None, missing_value=settings.no_value):
"""
Save 2D dataset as netCDF4 file, e.g. Prediction dataset
Input:
Outfile: path to store the netcdf file, string
x: longitude vector, list
y: latitude vector, list
data: 2D data array
features: contained features in prediction dataset, list of chars
crs: coordinate reference system, string
data_unit: data unit, string
missing_value: no data value, integer or float
"""
# If outfile exists already, delete
if os.path.exists(outfile):
os.remove(outfile)
ds = nc.Dataset(outfile, 'w', format='NETCDF4')
ds.createDimension('lon', len(x))
ds.createDimension('lat', len(y))
ds.createDimension('feat', len(features))
longitude = ds.createVariable('Longitude', 'f4', 'lon')
latitude = ds.createVariable('Latitude', 'f4', 'lat')
result = ds.createVariable('Result', 'f4', ('lat', 'lon'))
Features = ds.createVariable('features', 'S1', 'feat')
longitude[:] = x
latitude[:] = y
result[:, :] = data
Features[:] = features
# Provide global information in output-file
if crs is not None:
longitude.units = crs
latitude.units = crs
if data_unit is not None:
result.units = data_unit
ds.missing_value = missing_value
ds.close()