mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
python: pmtiles-convert from mbtiles writes v3 spec
This commit is contained in:
@@ -1,96 +1 @@
|
||||
import unittest
|
||||
from pmtiles import Entry
|
||||
from pmtiles.writer import find_leaf_level, make_pyramid
|
||||
|
||||
|
||||
class TestTilePyramid(unittest.TestCase):
|
||||
def test_root_sorted(self):
|
||||
entries = [
|
||||
Entry(1, 0, 0, 1, 1, False),
|
||||
Entry(1, 0, 1, 2, 1, False),
|
||||
Entry(1, 1, 0, 3, 1, False),
|
||||
Entry(1, 1, 1, 4, 1, False),
|
||||
Entry(0, 0, 0, 0, 1, False),
|
||||
]
|
||||
root_entries, leaf_dirs = make_pyramid(entries, 0, 6)
|
||||
self.assertEqual(len(root_entries), 5)
|
||||
self.assertEqual(len(leaf_dirs), 0)
|
||||
self.assertEqual(root_entries[0].z, 0)
|
||||
self.assertEqual(root_entries[4].z, 1)
|
||||
|
||||
def test_leafdir(self):
|
||||
entries = [
|
||||
Entry(0, 0, 0, 0, 1, False),
|
||||
Entry(1, 0, 0, 1, 1, False),
|
||||
Entry(1, 0, 1, 2, 1, False),
|
||||
Entry(1, 1, 0, 3, 1, False),
|
||||
Entry(1, 1, 1, 4, 1, False),
|
||||
Entry(2, 0, 0, 5, 1, False),
|
||||
Entry(3, 0, 0, 6, 1, False),
|
||||
Entry(2, 0, 1, 7, 1, False),
|
||||
Entry(3, 0, 2, 8, 1, False),
|
||||
]
|
||||
root_entries, leaf_dirs = make_pyramid(entries, 0, 7)
|
||||
self.assertEqual(len(root_entries), 7)
|
||||
self.assertEqual(root_entries[5].y, 0)
|
||||
self.assertEqual(root_entries[6].y, 1)
|
||||
self.assertEqual(len(leaf_dirs), 1)
|
||||
self.assertEqual(len(leaf_dirs[0]), 4)
|
||||
self.assertEqual(leaf_dirs[0][0].z, 2)
|
||||
self.assertEqual(leaf_dirs[0][1].z, 2)
|
||||
self.assertEqual(leaf_dirs[0][2].z, 3)
|
||||
self.assertEqual(leaf_dirs[0][3].z, 3)
|
||||
|
||||
def test_leafdir_overflow(self):
|
||||
entries = [
|
||||
Entry(0, 0, 0, 0, 1, False),
|
||||
Entry(1, 0, 0, 1, 1, False),
|
||||
Entry(1, 0, 1, 2, 1, False),
|
||||
Entry(1, 1, 0, 3, 1, False),
|
||||
Entry(1, 1, 1, 4, 1, False),
|
||||
Entry(2, 0, 0, 5, 1, False),
|
||||
Entry(3, 0, 0, 6, 1, False),
|
||||
Entry(3, 0, 1, 7, 1, False),
|
||||
Entry(3, 1, 0, 8, 1, False),
|
||||
Entry(3, 1, 1, 9, 1, False),
|
||||
Entry(2, 0, 1, 10, 1, False),
|
||||
Entry(3, 0, 2, 11, 1, False),
|
||||
Entry(3, 0, 3, 12, 1, False),
|
||||
Entry(3, 1, 2, 13, 1, False),
|
||||
Entry(3, 1, 3, 14, 1, False),
|
||||
]
|
||||
root_entries, leaf_dirs = make_pyramid(entries, 0, 7)
|
||||
self.assertEqual(len(root_entries), 7)
|
||||
self.assertEqual(root_entries[5].y, 0)
|
||||
self.assertEqual(root_entries[6].y, 1)
|
||||
|
||||
def test_sparse_pyramid(self):
|
||||
entries = [
|
||||
Entry(0, 0, 0, 0, 1, False),
|
||||
Entry(1, 0, 0, 1, 1, False),
|
||||
Entry(1, 0, 1, 2, 1, False),
|
||||
Entry(1, 1, 0, 3, 1, False),
|
||||
Entry(1, 1, 1, 4, 1, False),
|
||||
Entry(2, 0, 0, 5, 1, False),
|
||||
Entry(3, 0, 0, 6, 1, False),
|
||||
# Entry(2,0,1,7,1,False), make this entry missing
|
||||
Entry(3, 0, 2, 8, 1, False),
|
||||
]
|
||||
root_entries, leaf_dirs = make_pyramid(entries, 0, 7)
|
||||
self.assertEqual(len(root_entries), 7)
|
||||
self.assertEqual(root_entries[6].z, 2)
|
||||
self.assertEqual(root_entries[6].x, 0)
|
||||
self.assertEqual(root_entries[6].y, 1)
|
||||
|
||||
def test_full_z7_pyramid(self):
|
||||
entries = []
|
||||
# create artificial 8 levels
|
||||
for z in range(0, 9):
|
||||
for x in range(0, pow(2, z)):
|
||||
for y in range(0, pow(2, z)):
|
||||
entries.append(Entry(z, x, y, 0, 0, False))
|
||||
self.assertEqual(find_leaf_level(entries, 21845), 7)
|
||||
root_entries, leaf_dirs = make_pyramid(entries, 0)
|
||||
self.assertEqual(len(root_entries), 21845)
|
||||
self.assertEqual(len(leaf_dirs), 4)
|
||||
self.assertTrue(len(leaf_dirs[0]) <= 21845)
|
||||
|
||||
Reference in New Issue
Block a user