Skip to content

Commit 46ef998

Browse files
committed
Fixes #2
- updated version to v0.3.0 as API changed - ConstSizeTiles.__getitem__ -> (x_offset, y_offset, x_extent, y_extent), (x_out_size, y_out_size)
1 parent 6299385 commit 46ef998

File tree

7 files changed

+63
-24
lines changed

7 files changed

+63
-24
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@ from tiling import ConstSizeTiles
6060
tiles = ConstSizeTiles(image_size=(500, 500), tile_size=(256, 256), min_overlapping=15, scale=1.0)
6161

6262
print("Number of tiles: %i" % len(tiles))
63-
for extent in tiles:
63+
for extent, out_size in tiles:
64+
assert out_size[0] == tiles.tile_size[0]
65+
assert out_size[1] == tiles.tile_size[1]
6466
x, y, width, height = extent
6567
data = read_data(x, y, width, height,
66-
out_width=tiles.tile_size[0],
67-
out_height=tiles.tile_size[1])
68+
out_width=out_size[0],
69+
out_height=out_size[1])
6870
print("data.shape: {}".format(data.shape))
6971

7072
# Access a tile:

docs/source/quickstart.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,13 @@ Thus, overlapping tiles can be extracted as
7373
tiles = ConstSizeTiles(image_size=(500, 500), tile_size=(256, 256), min_overlapping=15, scale=1.0)
7474
7575
print("Number of tiles: %i" % len(tiles))
76-
for extent in tiles:
76+
for extent, out_size in tiles:
77+
assert out_size[0] == tiles.tile_size[0]
78+
assert out_size[1] == tiles.tile_size[1]
7779
x, y, width, height = extent
7880
data = read_data(x, y, width, height,
79-
out_width=tiles.tile_size[0],
80-
out_height=tiles.tile_size[1])
81+
out_width=out_size[0],
82+
out_height=out_size[1])
8183
print("data.shape: {}".format(data.shape))
8284
8385
# Access a tile:

examples/example_const_size_tiling.ipynb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
},
1212
{
1313
"cell_type": "code",
14-
"execution_count": 1,
14+
"execution_count": null,
1515
"metadata": {},
1616
"outputs": [],
1717
"source": [
@@ -153,9 +153,9 @@
153153
"fig = plt.figure(figsize=(20, 20))\n",
154154
"grid = ImageGrid(fig, 111, nrows_ncols=(tiles.ny, tiles.nx), axes_pad=0.1)\n",
155155
"\n",
156-
"for i, extent in enumerate(tiles):\n",
156+
"for i, (extent, out_size) in enumerate(tiles):\n",
157157
" x, y, w, h = extent\n",
158-
" tile = read_data(image_data, x, y, w, h, tiles.tile_size[0], tiles.tile_size[1])\n",
158+
" tile = read_data(image_data, x, y, w, h, out_size[0], out_size[1])\n",
159159
" ax = grid[i]\n",
160160
" im = ax.imshow(tile)\n",
161161
" ax.text(2, 2, '%i %i' % (x, y), color='w', backgroundcolor='m', alpha=0.7)\n",
@@ -193,9 +193,9 @@
193193
"fig = plt.figure(figsize=(20, 20))\n",
194194
"grid = ImageGrid(fig, 111, nrows_ncols=(tiles.ny, tiles.nx), axes_pad=0.1)\n",
195195
"\n",
196-
"for i, extent in enumerate(tiles):\n",
196+
"for i, (extent, out_size) in enumerate(tiles):\n",
197197
" x, y, w, h = extent\n",
198-
" tile = read_data(image_data, x, y, w, h, tiles.tile_size[0], tiles.tile_size[1])\n",
198+
" tile = read_data(image_data, x, y, w, h, out_size[0], out_size[1])\n",
199199
" ax = grid[i]\n",
200200
" im = ax.imshow(tile)\n",
201201
" ax.text(2, 2, '%i %i' % (x, y), color='w', backgroundcolor='m', alpha=0.7)\n",
@@ -231,9 +231,9 @@
231231
"fig = plt.figure(figsize=(20, 20))\n",
232232
"grid = ImageGrid(fig, 111, nrows_ncols=(tiles.ny, tiles.nx), axes_pad=0.1)\n",
233233
"\n",
234-
"for i, extent in enumerate(tiles):\n",
234+
"for i, (extent, out_size) in enumerate(tiles):\n",
235235
" x, y, w, h = extent\n",
236-
" tile = read_data(image_data, x, y, w, h, tiles.tile_size[0], tiles.tile_size[1])\n",
236+
" tile = read_data(image_data, x, y, w, h, out_size[0], out_size[1])\n",
237237
" ax = grid[i]\n",
238238
" im = ax.imshow(tile)\n",
239239
" ax.text(2, 2, '%i %i' % (x, y), color='w', backgroundcolor='m', alpha=0.7)\n",

tests/test_const_size.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
import unittest
3-
import math
43

54
from tiling import ConstSizeTiles
65

@@ -43,9 +42,10 @@ def test__compute_float_overlapping(self):
4342
def test_as_iterator(self):
4443
tiles = ConstSizeTiles((100, 120), (10, 10), min_overlapping=5)
4544
counter = 0
46-
for extent in tiles:
47-
_extent = tiles[counter]
45+
for extent, _ in tiles:
46+
_extent, _out_size = tiles[counter]
4847
self.assertEqual(extent, _extent)
48+
self.assertEqual(tiles.tile_size, _out_size)
4949
counter += 1
5050

5151
for i, j in [(len(tiles) - 1, -1), (len(tiles) - 2, -2), (len(tiles) - 3, -3)]:
@@ -67,7 +67,7 @@ def _test(im_size, ts, scale, min_overlapping):
6767
debug_msg += "n={}\n".format(len(tiles))
6868
self.assertGreater(len(tiles), 0, debug_msg)
6969

70-
extent0 = tiles[0]
70+
extent0, out_size = tiles[0]
7171
# Start at origin but should be positive
7272
debug_msg += "extent0={}\n".format(extent0)
7373
self.assertEqual((extent0[0], extent0[1]), (0, 0), debug_msg)
@@ -76,8 +76,8 @@ def _test(im_size, ts, scale, min_overlapping):
7676
self.assertLessEqual((extent0[2], extent0[3]), (ts / scale, ts / scale), debug_msg)
7777

7878
for i in range(1, len(tiles)):
79-
extent = tiles[i]
80-
prev_extent = tiles[i - 1]
79+
extent, _ = tiles[i]
80+
prev_extent, _ = tiles[i - 1]
8181
var_debug_msg = "i={} extent={}\n" \
8282
.format(i, extent)
8383
var_debug_msg += "prev_extent={}\n" \
@@ -89,7 +89,7 @@ def _test(im_size, ts, scale, min_overlapping):
8989
debug_msg + var_debug_msg)
9090

9191
# Check the last tile ends at the boundary
92-
extent = tiles[-1]
92+
extent, _ = tiles[-1]
9393
debug_msg += "extent={}\n".format(extent)
9494
for j in [0, 1]:
9595
self.assertLess(extent[j], im_size, debug_msg)

tiling/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from six import with_metaclass
1010

1111

12-
__version__ = '0.2.0'
12+
__version__ = '0.3.0'
1313

1414

1515
class BaseTiles(with_metaclass(ABCMeta, object)):

tiling/const_size.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ class ConstSizeTiles(BaseTiles):
1010
"""Class provides constant size tile parameters (offset, extent) to extract data from image.
1111
Generated tile extents can overlap and do not includes nodata paddings.
1212
13+
Examples:
14+
15+
.. code-block:: python
16+
17+
from tiling import ConstSizeTiles
18+
19+
tiles = ConstSizeTiles(image_size=(500, 500), tile_size=(256, 256), min_overlapping=15, scale=1.0)
20+
21+
print("Number of tiles: %i" % len(tiles))
22+
for extent, out_size in tiles:
23+
x, y, width, height = extent
24+
data = read_data(x, y, width, height,
25+
out_width=out_size[0],
26+
out_height=out_size[1])
27+
print("data.shape: {}".format(data.shape))
28+
1329
Args:
1430
image_size (list/tuple of int): input image size in pixels (width, height)
1531
tile_size (int or list/tuple of int): output tile size in pixels (width, height)
@@ -62,7 +78,7 @@ def __getitem__(self, idx):
6278
idx: (int) tile index between `0` and `len(tiles)`
6379
6480
Returns:
65-
(tuple) tile extent in pixels: x offset, y offset, x tile extent, y tile extent
81+
(tuple) tile extent, output size in pixels
6682
6783
If scale is 1.0, then x tile extent, y tile extent are equal to tile size
6884
"""
@@ -77,7 +93,7 @@ def __getitem__(self, idx):
7793
self.float_overlapping_x)
7894
y_tile_offset, y_tile_extent = self._compute_tile_extent(y_tile_index, self.tile_extent[1],
7995
self.float_overlapping_y)
80-
return x_tile_offset, y_tile_offset, x_tile_extent, y_tile_extent
96+
return (x_tile_offset, y_tile_offset, x_tile_extent, y_tile_extent), (self.tile_size[0], self.tile_size[1])
8197

8298
@staticmethod
8399
def _compute_number_of_tiles(tile_extent, image_size, min_overlapping):

tiling/const_stride.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,25 @@
1515
class ConstStrideTiles(BaseTiles):
1616
"""Class provides tile parameters (offset, extent) to extract data from image.
1717
18+
Examples:
19+
20+
.. code-block:: python
21+
22+
from tiling import ConstStrideTiles
23+
24+
tiles = ConstStrideTiles(image_size=(500, 500), tile_size=(256, 256), stride=(100, 100),
25+
origin=(-100, -100),
26+
scale=1.0,
27+
include_nodata=True)
28+
29+
print("Number of tiles: %i" % len(tiles))
30+
for extent, out_size in tiles:
31+
x, y, width, height = extent
32+
data = read_data(x, y, width, height,
33+
out_width=out_size[0],
34+
out_height=out_size[1])
35+
print("data.shape: {}".format(data.shape))
36+
1837
Args:
1938
image_size (list/tuple of int): input image size in pixels (width, height)
2039
tile_size (int or list/tuple of int): output tile size in pixels (width, height)
@@ -85,7 +104,7 @@ def __getitem__(self, idx):
85104
idx: (int) tile index between `0` and `len(tiles)`
86105
87106
Returns:
88-
(tuple) tile extent, output size
107+
(tuple) tile extent, output size in pixels
89108
90109
Tile extent in pixels: x offset, y offset, x tile extent, y tile extent.
91110
If scale is 1.0, then x tile extent, y tile extent are equal to tile size

0 commit comments

Comments
 (0)