示例#1
0
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_var in nco.variables
        assert nco[crs_var].grid_mapping_name == 'latitude_longitude'
        _ensure_spheroid(nco[crs_var])
        _ensure_geospatial(nco)
示例#2
0
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_var in nco.variables
        assert nco[crs_var].grid_mapping_name == 'sinusoidal'
        assert 'longitude_of_central_meridian' in nco[crs_var].ncattrs()
        _ensure_spheroid(nco[crs_var])
        _ensure_geospatial(nco)
示例#3
0
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_var in nco.variables
        assert nco[crs_var].grid_mapping_name == 'albers_conical_equal_area'
        assert 'standard_parallel' in nco[crs_var].ncattrs()
        assert 'longitude_of_central_meridian' in nco[crs_var].ncattrs()
        assert 'latitude_of_projection_origin' in nco[crs_var].ncattrs()
        _ensure_spheroid(nco[crs_var])
        _ensure_gdal(nco[crs_var])
        _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)
def saveNC(output, filename, history):

    logging.info('saveNC: dataset {} - {}'.format(type(output), output))

    start = time.time()
    nco = netcdf_writer.create_netcdf(filename)
    nco.history = (history.encode('ascii', 'replace'))

    coords = output.coords
    cnames = ()

    # This 3 lines were created by Aurelio
    # if an error occurs in this function please
    # check this 3 lines first.
    # we reorder the coordinates system to match
    coord_names = list(output.coords.keys())

    print('coord_names_antes', coord_names)

    sample_coords = []
    if 'time' in coord_names:
        sample_coords.append('time')
        coord_names.remove('time')

    if 'latitude' in coord_names:
        sample_coords.append('latitude')
        coord_names.remove('latitude')
    else:
        raise Exception("No hay 'latitude' como coordenada en el dataset")

    if 'longitude' in coord_names:
        sample_coords.append('longitude')
        coord_names.remove('longitude')
    else:
        raise Exception("No hay 'longitude' como coordenada en el dataset")

    sample_coords = sample_coords + coord_names
    coord_names = sample_coords

    print('coord_names_despues', coord_names)

    #for x in coords:
    for x in coord_names:
        if not 'units' in coords[x].attrs:
            if x == "time":
                coords[x].attrs["units"] = u"seconds since 1970-01-01 00:00:00"
        netcdf_writer.create_coordinate(nco, x, coords[x].values,
                                        coords[x].units)
        cnames = cnames + (x, )
    _crs = output.crs
    if isinstance(_crs, xr.DataArray):
        _crs = CRS(str(_crs.spatial_ref))
    netcdf_writer.create_grid_mapping_variable(nco, _crs)
    for band in output.data_vars:
        #Para evitar problemas con xarray <0.11
        if band in coords.keys() or band == 'crs':
            continue
        output.data_vars[band].values[np.isnan(
            output.data_vars[band].values)] = nodata
        var = netcdf_writer.create_variable(nco,
                                            band,
                                            netcdf_writer.Variable(
                                                output.data_vars[band].dtype,
                                                nodata, cnames, None),
                                            set_crs=True)
        var[:] = netcdf_writer.netcdfy_data(output.data_vars[band].values)
    nco.close()

    end = time.time()
    logging.info('TIEMPO SALIDA NC:' + str((end - start)))