mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 19:01:08 +00:00
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:
@@ -63,9 +63,10 @@ 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):
|
||||||
header["tile_data_offset"] + entry.offset, entry.length
|
yield tileid_to_zxy(entry.tile_id + i), get_bytes(
|
||||||
)
|
header["tile_data_offset"] + entry.offset, entry.length
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
for t in traverse(
|
for t in traverse(
|
||||||
get_bytes,
|
get_bytes,
|
||||||
|
|||||||
@@ -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"),
|
||||||
|
])
|
||||||
Reference in New Issue
Block a user