예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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
예제 #6
0
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)
예제 #7
0
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