mirror of
https://github.com/rasterio/rasterio.git
synced 2025-12-08 17:36:12 +00:00
* Automatic overview level computation * Change rio overview arg from -1 to auto * Simplify get_maximum_overview_level
103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
import logging
|
|
import sys
|
|
|
|
from click.testing import CliRunner
|
|
import pytest
|
|
|
|
import rasterio
|
|
from rasterio.rio.main import main_group as cli
|
|
from rasterio.rio.overview import get_maximum_overview_level
|
|
|
|
|
|
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
|
|
|
|
|
def test_err(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile, '--build', 'a^2'])
|
|
assert result.exit_code == 2
|
|
assert "must match" in result.output
|
|
|
|
|
|
def test_ls_none(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
|
|
assert result.exit_code == 0
|
|
expected = "Overview factors:\n Band 1: None (method: 'unknown')\n Band 2: None (method: 'unknown')\n Band 3: None (method: 'unknown')\n"
|
|
assert result.output == expected
|
|
|
|
|
|
def test_build_ls(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile, '--build', '2,4,8'])
|
|
assert result.exit_code == 0
|
|
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
|
|
assert result.exit_code == 0
|
|
expected = " Band 1: [2, 4, 8] (method: 'nearest')\n Band 2: [2, 4, 8] (method: 'nearest')\n Band 3: [2, 4, 8] (method: 'nearest')\n"
|
|
assert result.output.endswith(expected)
|
|
|
|
|
|
def test_build_pow_ls(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile, '--build', '2^1..3'])
|
|
assert result.exit_code == 0
|
|
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
|
|
assert result.exit_code == 0
|
|
expected = " Band 1: [2, 4, 8] (method: 'nearest')\n Band 2: [2, 4, 8] (method: 'nearest')\n Band 3: [2, 4, 8] (method: 'nearest')\n"
|
|
assert result.output.endswith(expected)
|
|
|
|
|
|
def test_rebuild_ls(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
|
|
result = runner.invoke(
|
|
cli,
|
|
['overview', inputfile, '--build', '2,4,8', '--resampling', 'cubic'])
|
|
assert result.exit_code == 0
|
|
|
|
result = runner.invoke(cli, ['overview', inputfile, '--rebuild'])
|
|
assert result.exit_code == 0
|
|
|
|
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
|
|
assert result.exit_code == 0
|
|
|
|
expected = " Band 1: [2, 4, 8] (method: 'cubic')\n Band 2: [2, 4, 8] (method: 'cubic')\n Band 3: [2, 4, 8] (method: 'cubic')\n"
|
|
assert result.output.endswith(expected)
|
|
|
|
|
|
def test_no_args(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile])
|
|
assert result.exit_code == 2
|
|
|
|
|
|
def test_build_auto_ls(data):
|
|
runner = CliRunner()
|
|
inputfile = str(data.join('RGB.byte.tif'))
|
|
result = runner.invoke(cli, ['overview', inputfile, '--build', 'auto'])
|
|
assert result.exit_code == 0
|
|
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
|
|
assert result.exit_code == 0
|
|
expected = " Band 1: [2, 4] (method: 'nearest')\n Band 2: [2, 4] (method: 'nearest')\n Band 3: [2, 4] (method: 'nearest')\n"
|
|
assert result.output.endswith(expected)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"width, height, minsize, expected",
|
|
[
|
|
(256, 256, 256, 0),
|
|
(257, 257, 256, 1),
|
|
(1000, 1000, 128, 3),
|
|
(1000, 100, 128, 0)
|
|
]
|
|
)
|
|
def test_max_overview(width, height, minsize, expected):
|
|
overview_level = get_maximum_overview_level(width, height, minsize)
|
|
assert overview_level == expected
|