Exemple #1
0
def create_netcdf_storage_unit(filename,
                               crs,
                               coordinates,
                               variables,
                               variable_params,
                               global_attributes=None,
                               netcdfparams=None):
    """
    Create a NetCDF file on disk.

    :param pathlib.Path filename: filename to write to
    :param datacube.utils.geometry.CRS crs: Datacube CRS object defining the spatial projection
    :param dict coordinates: Dict of named `datacube.model.Coordinate`s to create
    :param dict variables: Dict of named `datacube.model.Variable`s to create
    :param dict variable_params:
        Dict of dicts, with keys matching variable names, of extra parameters for variables
    :param dict global_attributes: named global attributes to add to output file
    :param dict netcdfparams: Extra parameters to use when creating netcdf file
    :return: open netCDF4.Dataset object, ready for writing to
    """
    filename = Path(filename)
    if filename.exists():
        raise RuntimeError('Storage Unit already exists: %s' % filename)

    try:
        filename.parent.mkdir(parents=True)
    except OSError:
        pass

    _LOG.info('Creating storage unit: %s', filename)

    nco = netcdf_writer.create_netcdf(str(filename), **(netcdfparams or {}))

    for name, coord in coordinates.items():
        netcdf_writer.create_coordinate(nco, name, coord.values, coord.units)

    netcdf_writer.create_grid_mapping_variable(nco, crs)

    for name, variable in variables.items():
        set_crs = all(dim in variable.dims for dim in crs.dimensions)
        var_params = variable_params.get(name, {})
        data_var = netcdf_writer.create_variable(nco,
                                                 name,
                                                 variable,
                                                 set_crs=set_crs,
                                                 **var_params)

        for key, value in var_params.get('attrs', {}).items():
            setattr(data_var, key, value)

    for key, value in (global_attributes or {}).items():
        setattr(nco, key, value)

    return nco
def test_create_epsg4326_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'latitude', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'longitude', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, GEO_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'latitude_longitude'
        _ensure_spheroid(nco['crs'])
        _ensure_geospatial(nco)
def test_create_epsg4326_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'latitude', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'longitude', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, GEO_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'latitude_longitude'
        _ensure_spheroid(nco['crs'])
        _ensure_geospatial(nco)
def test_create_sinus_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'x', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'y', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, SINIS_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'sinusoidal'
        assert 'longitude_of_central_meridian' in nco['crs'].ncattrs()
        _ensure_spheroid(nco['crs'])
        _ensure_geospatial(nco)
def test_create_sinus_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'x', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'y', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, SINIS_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'sinusoidal'
        assert 'longitude_of_central_meridian' in nco['crs'].ncattrs()
        _ensure_spheroid(nco['crs'])
        _ensure_geospatial(nco)
def test_create_albers_projection_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'x', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'y', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, ALBERS_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'albers_conical_equal_area'
        assert 'standard_parallel' in nco['crs'].ncattrs()
        assert 'longitude_of_central_meridian' in nco['crs'].ncattrs()
        assert 'latitude_of_projection_origin' in nco['crs'].ncattrs()
        _ensure_spheroid(nco['crs'])
        _ensure_gdal(nco['crs'])
        _ensure_geospatial(nco)
Exemple #7
0
def saveNC(output,filename, history):

    nco=netcdf_writer.create_netcdf(filename)
    nco.history = (history.decode('utf-8').encode('ascii','replace'))

    coords=output.coords
    cnames=()
    for x in coords:
        netcdf_writer.create_coordinate(nco, x, coords[x].values, coords[x].units)
        cnames=cnames+(x,)
    netcdf_writer.create_grid_mapping_variable(nco, output.crs)
    for band in output.data_vars:
        output.data_vars[band].values[np.isnan(output.data_vars[band].values)]=nodata
        var= netcdf_writer.create_variable(nco, band, Variable(output.data_vars[band].dtype, nodata, cnames, None) ,set_crs=True)
        var[:] = netcdf_writer.netcdfy_data(output.data_vars[band].values)
    nco.close()
def test_create_albers_projection_netcdf(tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'x', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'y', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, ALBERS_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'albers_conical_equal_area'
        assert 'standard_parallel' in nco['crs'].ncattrs()
        assert 'longitude_of_central_meridian' in nco['crs'].ncattrs()
        assert 'latitude_of_projection_origin' in nco['crs'].ncattrs()
        _ensure_spheroid(nco['crs'])
        _ensure_gdal(nco['crs'])
        _ensure_geospatial(nco)
def test_create_lambert_conformal_conic_2sp_projection_netcdf(
        tmpnetcdf_filename):
    nco = create_netcdf(tmpnetcdf_filename)
    create_coordinate(nco, 'x', numpy.array([1., 2., 3.]), 'm')
    create_coordinate(nco, 'y', numpy.array([1., 2., 3.]), 'm')
    create_grid_mapping_variable(nco, LCC2_PROJ)
    nco.close()

    with netCDF4.Dataset(tmpnetcdf_filename) as nco:
        assert 'crs' in nco.variables
        assert nco['crs'].grid_mapping_name == 'lambert_conformal_conic'
        assert 'standard_parallel' in nco['crs'].ncattrs()
        assert 'longitude_of_central_meridian' in nco['crs'].ncattrs()
        assert 'latitude_of_projection_origin' in nco['crs'].ncattrs()
        assert 'false_easting' in nco['crs'].ncattrs()
        assert 'false_northing' in nco['crs'].ncattrs()
        _ensure_spheroid(nco['crs'])
        _ensure_gdal(nco['crs'])
        _ensure_geospatial(nco)
Exemple #10
0
def write_dataset_to_netcdf(access_unit, global_attributes, variable_params,
                            filename):
    if filename.exists():
        raise RuntimeError('Storage Unit already exists: %s' % filename)

    try:
        filename.parent.mkdir(parents=True)
    except OSError:
        pass

#    _LOG.info("Writing storage unit: %s", filename)
    nco = netcdf_writer.create_netcdf(str(filename))

    for name, coord in access_unit.coords.items():
        netcdf_writer.create_coordinate(nco, name, coord.values, coord.units)

    netcdf_writer.create_grid_mapping_variable(nco, access_unit.crs)

    for name, variable in access_unit.data_vars.items():
        # Create variable
        var_params = variable_params.get(name, {})
        data_var = netcdf_writer.create_variable(
            nco, name,
            Variable(variable.dtype, getattr(variable, 'nodata',
                                             None), variable.dims,
                     getattr(variable, 'units', '1')), **var_params)

        # Write data
        data_var[:] = netcdf_writer.netcdfy_data(variable.values)

        # TODO: 'flags_definition', 'spectral_definition'?

        for key, value in variable_params.get(name, {}).get('attrs',
                                                            {}).items():
            setattr(data_var, key, value)

    # write global atrributes
    for key, value in global_attributes.items():
        setattr(nco, key, value)

    nco.close()
Exemple #11
0
def create_netcdf_storage_unit(filename,
                               crs,
                               coordinates,
                               variables,
                               variable_params,
                               global_attributes=None,
                               netcdfparams=None):
    if filename.exists():
        raise RuntimeError('Storage Unit already exists: %s' % filename)

    try:
        filename.parent.mkdir(parents=True)
    except OSError:
        pass

    nco = netcdf_writer.create_netcdf(str(filename), **(netcdfparams or {}))

    for name, coord in coordinates.items():
        netcdf_writer.create_coordinate(nco, name, coord.values, coord.units)

    netcdf_writer.create_grid_mapping_variable(nco, crs)

    for name, variable in variables.items():
        set_crs = all(dim in variable.dims for dim in crs.dimensions)
        var_params = variable_params.get(name, {})
        data_var = netcdf_writer.create_variable(nco,
                                                 name,
                                                 variable,
                                                 set_crs=set_crs,
                                                 **var_params)

        for key, value in var_params.get('attrs', {}).items():
            setattr(data_var, key, value)

    for key, value in (global_attributes or {}).items():
        setattr(nco, key, value)

    return nco