fix reader.py reading all the tiles (#357)

* fix reader.py reading all the tiles

* add unit test

---------

Co-authored-by: Gabor Simko <gsimko3@gmail.com>
This commit is contained in:
Gabor Simko
2024-02-09 20:40:06 -07:00
committed by GitHub
parent 5b8627b0d8
commit ea1657d8fe
2 changed files with 27 additions and 4 deletions

View File

@@ -63,7 +63,8 @@ def traverse(get_bytes, header, dir_offset, dir_length):
entries = deserialize_directory(get_bytes(dir_offset, dir_length)) entries = deserialize_directory(get_bytes(dir_offset, dir_length))
for entry in entries: for entry in entries:
if entry.run_length > 0: if entry.run_length > 0:
yield tileid_to_zxy(entry.tile_id), get_bytes( for i in range(entry.run_length):
yield tileid_to_zxy(entry.tile_id + i), get_bytes(
header["tile_data_offset"] + entry.offset, entry.length header["tile_data_offset"] + entry.offset, entry.length
) )
else: else:

View File

@@ -1,7 +1,7 @@
import unittest import unittest
from io import BytesIO from io import BytesIO
from pmtiles.writer import Writer from pmtiles.writer import Writer
from pmtiles.reader import Reader, MemorySource from pmtiles.reader import all_tiles, Reader, MemorySource
from pmtiles.tile import Compression, TileType, tileid_to_zxy, zxy_to_tileid from pmtiles.tile import Compression, TileType, tileid_to_zxy, zxy_to_tileid
@@ -46,3 +46,25 @@ class TestReaderWriter(unittest.TestCase):
reader = Reader(MemorySource(buf.getvalue())) reader = Reader(MemorySource(buf.getvalue()))
self.assertEqual(reader.header()["clustered"], False) self.assertEqual(reader.header()["clustered"], False)
def test_all_tiles(self):
buf = BytesIO()
writer = Writer(buf)
writer.write_tile(zxy_to_tileid(0, 0, 0), b"1")
writer.write_tile(zxy_to_tileid(1, 0, 0), b"1")
writer.write_tile(zxy_to_tileid(2, 0, 0), b"2")
writer.finalize(
{
"tile_compression": Compression.UNKNOWN,
"tile_type": TileType.UNKNOWN,
},
{"key": "value"},
)
reader = Reader(MemorySource(buf.getvalue()))
tiles = list(all_tiles(reader.get_bytes))
self.assertEqual(tiles, [
((0,0,0), b"1"),
((1,0,0), b"1"),
((2,0,0), b"2"),
])