MCPcopy
hub / github.com/protomaps/PMTiles / finalize

Method finalize

python/pmtiles/pmtiles/writer.py:86–124  ·  view source on GitHub ↗
(self, header, metadata)

Source from the content-addressed store, hash-verified

84 self.addressed_tiles += 1
85
86 def finalize(self, header, metadata):
87 header["addressed_tiles_count"] = self.addressed_tiles
88 header["tile_entries_count"] = len(self.tile_entries)
89 header["tile_contents_count"] = len(self.hash_to_offset)
90
91 self.tile_entries = sorted(self.tile_entries, key=lambda e: e.tile_id)
92
93 header["min_zoom"] = tileid_to_zxy(self.tile_entries[0].tile_id)[0]
94 header["max_zoom"] = tileid_to_zxy(self.tile_entries[-1].tile_id)[0]
95
96 root_bytes, leaves_bytes, num_leaves = optimize_directories(
97 self.tile_entries, 16384 - 127
98 )
99
100 compressed_metadata = gzip.compress(json.dumps(metadata).encode())
101 header["clustered"] = self.clustered
102 header["internal_compression"] = Compression.GZIP
103 header["root_offset"] = 127
104 header["root_length"] = len(root_bytes)
105 header["metadata_offset"] = header["root_offset"] + header["root_length"]
106 header["metadata_length"] = len(compressed_metadata)
107 header["leaf_directory_offset"] = (
108 header["metadata_offset"] + header["metadata_length"]
109 )
110 header["leaf_directory_length"] = len(leaves_bytes)
111 header["tile_data_offset"] = (
112 header["leaf_directory_offset"] + header["leaf_directory_length"]
113 )
114 header["tile_data_length"] = self.offset
115
116 header_bytes = serialize_header(header)
117
118 self.f.write(header_bytes)
119 self.f.write(root_bytes)
120 self.f.write(compressed_metadata)
121 self.f.write(leaves_bytes)
122 self.tile_f.seek(0)
123 shutil.copyfileobj(self.tile_f, self.f)
124 self.tile_f.close()

Callers 7

test_roundtripMethod · 0.95
test_all_tilesMethod · 0.95
test_roundtripMethod · 0.95
mbtiles_to_pmtilesFunction · 0.80
disk_to_pmtilesFunction · 0.80

Calls 3

tileid_to_zxyFunction · 0.85
optimize_directoriesFunction · 0.85
serialize_headerFunction · 0.85

Tested by 4

test_roundtripMethod · 0.76
test_all_tilesMethod · 0.76
test_roundtripMethod · 0.76