mirror of
https://github.com/rasterio/rasterio.git
synced 2025-12-08 17:36:12 +00:00
107 lines
3.3 KiB
Python
107 lines
3.3 KiB
Python
from affine import Affine
|
|
import pytest
|
|
|
|
import rasterio
|
|
from rasterio.errors import RasterioDeprecationWarning
|
|
from rasterio.windows import Window, WindowMethodsMixin
|
|
|
|
|
|
EPS = 1.0e-8
|
|
|
|
|
|
def assert_window_almost_equals(a, b, precision=3):
|
|
assert round(a.col_off, precision) == round(b.col_off, precision)
|
|
assert round(a.row_off, precision) == round(b.row_off, precision)
|
|
assert round(a.width, precision) == round(b.width, precision)
|
|
assert round(a.height, precision) == round(b.height, precision)
|
|
|
|
|
|
class MockDatasetBase(object):
|
|
def __init__(self):
|
|
# from tests/data/RGB.byte.tif
|
|
self.affine = Affine(300.0379266750948, 0.0, 101985.0,
|
|
0.0, -300.041782729805, 2826915.0)
|
|
self.bounds = (101985.0, 2611485.0, 339315.0, 2826915.0)
|
|
self.transform = self.affine
|
|
self.height = 718
|
|
self.width = 791
|
|
|
|
|
|
def test_windows_mixin():
|
|
|
|
class MockDataset(MockDatasetBase, WindowMethodsMixin):
|
|
pass
|
|
|
|
src = MockDataset()
|
|
|
|
assert_window_almost_equals(
|
|
src.window(*src.bounds),
|
|
Window(0, 0, src.width, src.height)
|
|
)
|
|
|
|
assert src.window_bounds(Window(0, 0, src.width, src.height)) == src.bounds
|
|
|
|
assert src.window_transform(
|
|
Window(0, 0, src.width, src.height)) == src.transform
|
|
|
|
|
|
def test_windows_mixin_fail():
|
|
|
|
class MockDataset(WindowMethodsMixin):
|
|
# doesn't inherit transform, height and width
|
|
pass
|
|
|
|
src = MockDataset()
|
|
with pytest.raises(TypeError):
|
|
src.window()
|
|
with pytest.raises(TypeError):
|
|
src.window_bounds()
|
|
with pytest.raises(TypeError):
|
|
src.window_transform()
|
|
|
|
|
|
def test_window_transform_method():
|
|
with rasterio.open('tests/data/RGB.byte.tif') as src:
|
|
assert src.window_transform(Window(0, 0, None, None)) == src.transform
|
|
assert src.window_transform(Window(None, None, None, None)) == src.transform
|
|
assert src.window_transform(
|
|
Window(1, 1, None, None)).c == src.bounds.left + src.res[0]
|
|
assert src.window_transform(
|
|
((1, None), (1, None))).f == src.bounds.top - src.res[1]
|
|
assert src.window_transform(
|
|
((-1, None), (-1, None))).c == src.bounds.left - src.res[0]
|
|
assert src.window_transform(
|
|
((-1, None), (-1, None))).f == src.bounds.top + src.res[1]
|
|
|
|
|
|
def test_window_method():
|
|
with rasterio.open('tests/data/RGB.byte.tif') as src:
|
|
left, bottom, right, top = src.bounds
|
|
dx, dy = src.res
|
|
|
|
assert_window_almost_equals(
|
|
src.window(left + EPS, bottom + EPS, right - EPS, top - EPS),
|
|
Window(0, 0, src.width, src.height)
|
|
)
|
|
|
|
assert_window_almost_equals(
|
|
src.window(left, top - 400, left + 400, top),
|
|
Window(0, 0, 400 / src.res[0], 400 / src.res[1])
|
|
)
|
|
|
|
assert_window_almost_equals(
|
|
src.window(left, top - 2 * dy - EPS, left + 2 * dx - EPS, top),
|
|
Window(0, 0, 2, 2))
|
|
|
|
assert_window_almost_equals(
|
|
src.window(left - 2 * dx, top - 2 * dy, left + 2 * dx, top + 2 * dy),
|
|
Window(-2, -2, 4, 4)
|
|
)
|
|
|
|
|
|
def test_window_bounds_function():
|
|
with rasterio.open('tests/data/RGB.byte.tif') as src:
|
|
rows = src.height
|
|
cols = src.width
|
|
assert src.window_bounds(((0, rows), (0, cols))) == src.bounds
|