def test_gdal_calc_py_5(): if gdalnumeric_not_available: pytest.skip('gdalnumeric is not available, skipping all tests') shutil.copy('../gcore/data/stefan_full_rgba.tif', 'tmp/test_gdal_calc_py.tif') gdal_calc.Calc('A', A='tmp/test_gdal_calc_py.tif', overwrite=True, quiet=True, outfile='tmp/test_gdal_calc_py_5_1.tif') gdal_calc.Calc('A', A='tmp/test_gdal_calc_py.tif', A_band=2, overwrite=True, quiet=True, outfile='tmp/test_gdal_calc_py_5_2.tif') gdal_calc.Calc('Z', Z='tmp/test_gdal_calc_py.tif', Z_band=2, overwrite=True, quiet=True, outfile='tmp/test_gdal_calc_py_5_3.tif') gdal_calc.Calc(['A', 'Z'], A='tmp/test_gdal_calc_py.tif', Z='tmp/test_gdal_calc_py.tif', Z_band=2, overwrite=True, quiet=True, outfile='tmp/test_gdal_calc_py_5_4.tif') ds1 = gdal.Open('tmp/test_gdal_calc_py_5_1.tif') ds2 = gdal.Open('tmp/test_gdal_calc_py_5_2.tif') ds3 = gdal.Open('tmp/test_gdal_calc_py_5_3.tif') ds4 = gdal.Open('tmp/test_gdal_calc_py_5_4.tif') assert ds1 is not None, 'ds1 not found' assert ds2 is not None, 'ds2 not found' assert ds3 is not None, 'ds3 not found' assert ds4 is not None, 'ds4 not found' assert ds1.GetRasterBand(1).Checksum() == 12603, 'ds1 wrong checksum' assert ds2.GetRasterBand(1).Checksum() == 58561, 'ds2 wrong checksum' assert ds3.GetRasterBand(1).Checksum() == 58561, 'ds3 wrong checksum' assert ds4.GetRasterBand(1).Checksum() == 12603, 'ds4#1 wrong checksum' assert ds4.GetRasterBand(2).Checksum() == 58561, 'ds4#2 wrong checksum' ds1 = None ds2 = None ds3 = None ds4 = None
def test_gdal_calc_py_6(): """ test nodata """ if gdalnumeric_not_available: pytest.skip("gdalnumeric is not available, skipping all tests", allow_module_level=True) script_path = test_py_scripts.get_py_script('gdal_calc') if script_path is None: pytest.skip("gdal_calc script not found, skipping all tests", allow_module_level=True) test_id, test_count = 6, 2 out = make_temp_filename_list(test_id, test_count) gdal.Translate(out[0], '../gcore/data/byte.tif', options='-a_nodata 74') gdal_calc.Calc('A', A=out[0], overwrite=True, quiet=True, outfile=out[1], NoDataValue=1) for i, checksum in zip(range(test_count), (4672, 4673)): ds = check_file(out[i], checksum, i + 1) if i == 1: result = ds.GetRasterBand(1).ComputeRasterMinMax() assert result == (90, 255), 'Error! min/max not correct!' ds = None
def test_gdal_calc_py_5(): """ test python interface, basic copy """ infile = get_input_file() test_id, test_count = 5, 4 out = make_temp_filename_list(test_id, test_count) gdal_calc.Calc('A', A=infile, overwrite=True, quiet=True, outfile=out[0]) gdal_calc.Calc('A', A=infile, A_band=2, overwrite=True, quiet=True, outfile=out[1]) gdal_calc.Calc('Z', Z=infile, Z_band=2, overwrite=True, quiet=True, outfile=out[2]) gdal_calc.Calc(['A', 'Z'], A=infile, Z=infile, Z_band=2, overwrite=True, quiet=True, outfile=out[3]) for i, checksum in zip(range(test_count), (input_checksum[0], input_checksum[1], input_checksum[1])): check_file(out[i], checksum, i+1) bnd_count = 2 for i, checksum in zip(range(bnd_count), (input_checksum[0], input_checksum[1])): check_file(out[3], checksum, 4, bnd_idx=i+1)
def test_gdal_calc_py_5(): """ test python interface, basic copy """ if gdalnumeric_not_available: pytest.skip("gdalnumeric is not available, skipping all tests", allow_module_level=True) script_path = test_py_scripts.get_py_script('gdal_calc') if script_path is None: pytest.skip("gdal_calc script not found, skipping all tests", allow_module_level=True) infile = get_input_file() test_id, test_count = 5, 4 out = make_temp_filename_list(test_id, test_count) gdal_calc.Calc('A', A=infile, overwrite=True, quiet=True, outfile=out[0]) gdal_calc.Calc('A', A=infile, A_band=2, overwrite=True, quiet=True, outfile=out[1]) gdal_calc.Calc('Z', Z=infile, Z_band=2, overwrite=True, quiet=True, outfile=out[2]) gdal_calc.Calc(['A', 'Z'], A=infile, Z=infile, Z_band=2, overwrite=True, quiet=True, outfile=out[3]) for i, checksum in zip( range(test_count), (input_checksum[0], input_checksum[1], input_checksum[1])): check_file(out[i], checksum, i + 1) bnd_count = 2 for i, checksum in zip(range(bnd_count), (input_checksum[0], input_checksum[1])): check_file(out[3], checksum, 4, bnd_idx=i + 1)
def test_gdal_calc_py_6(): """ test nodata """ test_id, test_count = 6, 2 out = make_temp_filename_list(test_id, test_count) gdal.Translate(out[0], '../gcore/data/byte.tif', options='-a_nodata 74') gdal_calc.Calc('A', A=out[0], overwrite=True, quiet=True, outfile=out[1], NoDataValue=1) for i, checksum in zip(range(test_count), (4672, 4673)): ds = check_file(out[i], checksum, i+1) if i == 1: result = ds.GetRasterBand(1).ComputeRasterMinMax() assert result == (90, 255), 'Error! min/max not correct!' ds = None
def test_gdal_calc_py_6(): if gdalnumeric_not_available: pytest.skip('gdalnumeric is not available, skipping all tests') gdal.Translate('tmp/test_gdal_calc_py.tif', '../gcore/data/byte.tif', options='-a_nodata 74') gdal_calc.Calc('A', A='tmp/test_gdal_calc_py.tif', overwrite=True, quiet=True, outfile='tmp/test_gdal_calc_py_6.tif', NoDataValue=1) ds = gdal.Open('tmp/test_gdal_calc_py_6.tif') cs = ds.GetRasterBand(1).Checksum() assert cs == 4673 result = ds.GetRasterBand(1).ComputeRasterMinMax() assert result == (90, 255)
def test_gdal_calc_py_9(): """ test calculating sum in different ways. testing the following features: * noDataValue * user_namespace * using output ds * mem driver (no output file) * single alpha for multiple datasets * extent = 'fail' """ if gdalnumeric_not_available: pytest.skip("gdalnumeric is not available, skipping all tests", allow_module_level=True) script_path = test_py_scripts.get_py_script('gdal_calc') if script_path is None: pytest.skip("gdal_calc script not found, skipping all tests", allow_module_level=True) infile = get_input_file() test_id, test_count = 9, 9 out = make_temp_filename_list(test_id, test_count) common_kwargs = { 'hideNoData': True, 'overwrite': True, 'extent': 'fail', } inputs0 = dict() inputs0['a'] = infile total_bands = 3 checksums = [input_checksum[0], input_checksum[1], input_checksum[2]] inputs = [] keep_ds = [True, False, False] for i in range(total_bands): bnd_idx = i + 1 inputs0['a_band'] = bnd_idx outfile = out[i] return_ds = keep_ds[i] kwargs = copy(common_kwargs) kwargs.update(inputs0) ds = gdal_calc.Calc(calc='a', outfile=outfile, **kwargs) if return_ds: input_file = ds else: # the dataset must be closed if we are to read it again del ds input_file = outfile inputs.append(input_file) check_file(input_file, checksums[i], i + 1) inputs1 = dict() inputs1['a'] = inputs[0] inputs1['b'] = inputs[1] inputs1['c'] = inputs[2] inputs2 = {'a': inputs} write_output = True outfile = [out[i] if write_output else None for i in range(test_count)] i = total_bands checksum = 13256 kwargs = copy(common_kwargs) kwargs.update(inputs1) check_file( gdal_calc.Calc(calc='numpy.max((a,b,c),axis=0)', outfile=outfile[i], **kwargs), checksum, i) i += 1 kwargs = copy(common_kwargs) kwargs.update(inputs2) check_file( gdal_calc.Calc(calc='numpy.max(a,axis=0)', outfile=outfile[i], **kwargs), checksum, i) i += 1 kwargs = copy(common_kwargs) kwargs.update(inputs2) check_file( gdal_calc.Calc(calc='my_neat_max(a)', outfile=outfile[i], user_namespace={'my_neat_max': my_max}, **kwargs), checksum, i) i += 1 # for summing 3 bytes we'll use GDT_UInt16 gdal_dt = gdal.GDT_UInt16 np_dt = None if gdal_dt is None else gdal_calc.gdal_dt_to_np_dt[gdal_dt] # sum with overflow checksum = 12261 kwargs = copy(common_kwargs) kwargs.update(inputs1) check_file( gdal_calc.Calc(calc='a+b+c', type=gdal_dt, outfile=outfile[i], **kwargs), checksum, i) i += 1 # sum with numpy function, no overflow checksum = 12789 kwargs = copy(common_kwargs) kwargs.update(inputs2) check_file( gdal_calc.Calc(calc='numpy.sum(a,axis=0,dtype=np_dt)', type=gdal_dt, outfile=outfile[i], user_namespace={'np_dt': np_dt}, **kwargs), checksum, i) i += 1 # sum with my custom numpy function kwargs = copy(common_kwargs) kwargs.update(inputs2) check_file( gdal_calc.Calc(calc='my_neat_sum(a, out_dt)', type=gdal_dt, outfile=outfile[i], user_namespace={ 'my_neat_sum': my_sum, 'out_dt': gdal_dt }, **kwargs), checksum, i) i += 1