#!/usr/bin/env python import sys from pmtiles.reader import Reader, MmapSource, load_directory if len(sys.argv) <= 1: print("Usage: pmtiles-show PMTILES_FILE") print("Usage: pmtiles-show PMTILES_FILE Z X Y") print("Usage: pmtiles-show PMTILES_FILE list") exit(1) with open(sys.argv[1], "r+b") as f: reader = Reader(MmapSource(f)) spec_version = reader.header().version if len(sys.argv) == 2: print("spec version: ", spec_version) print("metadata:") for k, v in reader.header().metadata.items(): print(k, "=", v) print("root dir tiles:", len(reader.header().root_dir)) print("leaf directories:", len(set(reader.header().leaves.values()))) elif len(sys.argv) == 3: last_val = None for k, v in reader.header().root_dir.items(): print(f"{k[0]} {k[1]} {k[2]} {v[0]} {v[1]}") if last_val and k <= last_val: raise Exception("Error: directory entries not sorted") last_val = k for val in set(reader.header().leaves.values()): dir_bytes = reader.get_bytes(val[0], val[1]) leaf_dir, _ = load_directory(dir_bytes, 0, val[1] // 17) last_val = None for k, v in leaf_dir.items(): print(f"{k[0]} {k[1]} {k[2]} {v[0]} {v[1]}") if last_val and k <= last_val: raise Exception("Error: directory entries not sorted") last_val = k else: z = int(sys.argv[2]) x = int(sys.argv[3]) y = int(sys.argv[4]) print(reader.get(z, x, y))