mirror of
https://github.com/rasterio/rasterio.git
synced 2025-12-08 17:36:12 +00:00
124 lines
4.4 KiB
Python
124 lines
4.4 KiB
Python
import logging
|
|
import os.path
|
|
import unittest
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
import numpy
|
|
|
|
import rasterio
|
|
|
|
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
|
|
|
class WindowTest(unittest.TestCase):
|
|
def test_window_shape_errors(self):
|
|
# Positive height and width are needed when stop is None.
|
|
self.assertRaises(
|
|
ValueError,
|
|
rasterio.window_shape,
|
|
(((10, 20),(10, None)),) )
|
|
self.assertRaises(
|
|
ValueError,
|
|
rasterio.window_shape,
|
|
(((None, 10),(10, 20)),) )
|
|
def test_window_shape_None_start(self):
|
|
self.assertEqual(
|
|
rasterio.window_shape(((None,4),(None,102))),
|
|
(4, 102))
|
|
def test_window_shape_None_stop(self):
|
|
self.assertEqual(
|
|
rasterio.window_shape(((10, None),(10, None)), 100, 90),
|
|
(90, 80))
|
|
def test_window_shape_positive(self):
|
|
self.assertEqual(
|
|
rasterio.window_shape(((0,4),(1,102))),
|
|
(4, 101))
|
|
def test_window_shape_negative(self):
|
|
self.assertEqual(
|
|
rasterio.window_shape(((-10, None),(-10, None)), 100, 90),
|
|
(10, 10))
|
|
self.assertEqual(
|
|
rasterio.window_shape(((~0, None),(~0, None)), 100, 90),
|
|
(1, 1))
|
|
self.assertEqual(
|
|
rasterio.window_shape(((None, ~0),(None, ~0)), 100, 90),
|
|
(99, 89))
|
|
def test_eval(self):
|
|
self.assertEqual(
|
|
rasterio.eval_window(((-10, None), (-10, None)), 100, 90),
|
|
((90, 100), (80, 90)))
|
|
self.assertEqual(
|
|
rasterio.eval_window(((None, -10), (None, -10)), 100, 90),
|
|
((0, 90), (0, 80)))
|
|
|
|
def test_window_index():
|
|
idx = rasterio.window_index(((0,4),(1,12)))
|
|
assert len(idx) == 2
|
|
r, c = idx
|
|
assert r.start == 0
|
|
assert r.stop == 4
|
|
assert c.start == 1
|
|
assert c.stop == 12
|
|
arr = numpy.ones((20,20))
|
|
assert arr[idx].shape == (4, 11)
|
|
|
|
class RasterBlocksTest(unittest.TestCase):
|
|
def test_blocks(self):
|
|
with rasterio.open('tests/data/RGB.byte.tif') as s:
|
|
self.assertEqual(len(s.block_shapes), 3)
|
|
self.assertEqual(s.block_shapes, [(3, 791), (3, 791), (3, 791)])
|
|
windows = s.block_windows(1)
|
|
(j,i), first = next(windows)
|
|
self.assertEqual((j,i), (0, 0))
|
|
self.assertEqual(first, ((0, 3), (0, 791)))
|
|
windows = s.block_windows()
|
|
(j,i), first = next(windows)
|
|
self.assertEqual((j,i), (0, 0))
|
|
self.assertEqual(first, ((0, 3), (0, 791)))
|
|
(j, i), second = next(windows)
|
|
self.assertEqual((j,i), (1, 0))
|
|
self.assertEqual(second, ((3, 6), (0, 791)))
|
|
(j, i), last = list(windows)[~0]
|
|
self.assertEqual((j,i), (239, 0))
|
|
self.assertEqual(last, ((717, 718), (0, 791)))
|
|
def test_block_coverage(self):
|
|
with rasterio.open('tests/data/RGB.byte.tif') as s:
|
|
self.assertEqual(
|
|
s.width*s.height,
|
|
sum((w[0][1]-w[0][0])*(w[1][1]-w[1][0])
|
|
for ji, w in s.block_windows(1)))
|
|
|
|
class WindowReadTest(unittest.TestCase):
|
|
def test_read_window(self):
|
|
with rasterio.open('tests/data/RGB.byte.tif') as s:
|
|
windows = s.block_windows(1)
|
|
ji, first_window = next(windows)
|
|
first_block = s.read_band(1, window=first_window)
|
|
self.assertEqual(first_block.dtype, rasterio.ubyte)
|
|
self.assertEqual(
|
|
first_block.shape,
|
|
rasterio.window_shape(first_window))
|
|
|
|
class WindowWriteTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.tempdir = tempfile.mkdtemp()
|
|
def tearDown(self):
|
|
shutil.rmtree(self.tempdir)
|
|
def test_write_window(self):
|
|
name = os.path.join(self.tempdir, "test_write_window.tif")
|
|
a = numpy.ones((50, 50), dtype=rasterio.ubyte) * 127
|
|
with rasterio.open(
|
|
name, 'w',
|
|
driver='GTiff', width=100, height=100, count=1,
|
|
dtype=a.dtype) as s:
|
|
s.write_band(1, a, window=((30, 80), (10, 60)))
|
|
# subprocess.call(["open", name])
|
|
info = subprocess.check_output(["gdalinfo", "-stats", name])
|
|
self.assert_(
|
|
"Minimum=0.000, Maximum=127.000, "
|
|
"Mean=31.750, StdDev=54.993" in info.decode('utf-8'),
|
|
info)
|
|
|