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)
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)
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)))