mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 19:01:08 +00:00
python reader can read v2 archives (non-fixed leaf level) [#36]
This commit is contained in:
@@ -18,7 +18,12 @@ with read(sys.argv[1]) as reader:
|
|||||||
print('root entries:', reader.root_entries)
|
print('root entries:', reader.root_entries)
|
||||||
print('leaf directories:', len(set(reader.leaves.values())))
|
print('leaf directories:', len(set(reader.leaves.values())))
|
||||||
elif len(sys.argv) == 3:
|
elif len(sys.argv) == 3:
|
||||||
print("list")
|
for k,v in reader.root_dir.items():
|
||||||
|
print(f"{k[0]} {k[1]} {k[2]} {v[0]} {v[1]}")
|
||||||
|
for val in set(reader.leaves.values()):
|
||||||
|
leaf_dir, _ = reader.load_directory(val[0],val[1]//17)
|
||||||
|
for k,v in leaf_dir.items():
|
||||||
|
print(f"{k[0]} {k[1]} {k[2]} {v[0]} {v[1]}")
|
||||||
else:
|
else:
|
||||||
z = int(sys.argv[2])
|
z = int(sys.argv[2])
|
||||||
x = int(sys.argv[3])
|
x = int(sys.argv[3])
|
||||||
|
|||||||
@@ -53,14 +53,19 @@ class Reader:
|
|||||||
def root_entries(self):
|
def root_entries(self):
|
||||||
return int.from_bytes(self.mmap[8:10],byteorder='little')
|
return int.from_bytes(self.mmap[8:10],byteorder='little')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def leaf_level(self):
|
||||||
|
return next(iter(self.leaves))[0]
|
||||||
|
|
||||||
def get(self,z,x,y):
|
def get(self,z,x,y):
|
||||||
val = self.root_dir.get((z,x,y))
|
val = self.root_dir.get((z,x,y))
|
||||||
if val:
|
if val:
|
||||||
return self.mmap[val[0]:val[0]+val[1]]
|
return self.mmap[val[0]:val[0]+val[1]]
|
||||||
else:
|
else:
|
||||||
z7_tile_diff = z - 7
|
if len(self.leaves) > 0:
|
||||||
z7_tile = (7,x // (1 << z7_tile_diff),y // (1 << z7_tile_diff))
|
level_diff = z - self.leaf_level
|
||||||
val = self.leaves.get(z7_tile)
|
leaf = (self.leaf_level,x // (1 << level_diff),y // (1 << level_diff))
|
||||||
|
val = self.leaves.get(leaf)
|
||||||
if val:
|
if val:
|
||||||
directory, _ = self.load_directory(val[0],val[1]//17)
|
directory, _ = self.load_directory(val[0],val[1]//17)
|
||||||
val = directory.get((z,x,y))
|
val = directory.get((z,x,y))
|
||||||
|
|||||||
Reference in New Issue
Block a user