diff --git a/python/pmtiles/convert.py b/python/pmtiles/convert.py index dde1a43..41f2c9d 100644 --- a/python/pmtiles/convert.py +++ b/python/pmtiles/convert.py @@ -40,8 +40,8 @@ def mbtiles_to_header_json(mbtiles_metadata): else: header["tile_type"] = TileType.UNKNOWN - if mbtiles_metadata.get("compression") == "gzip": - header["tile_compression"] = Compression.GZIP # TODO: does this ever matter? + if tile_format == "pbf" or mbtiles_metadata.get("compression") == "gzip": + header["tile_compression"] = Compression.GZIP else: header["tile_compression"] = Compression.UNKNOWN @@ -65,6 +65,11 @@ def mbtiles_to_pmtiles(input, output, maxzoom): tileid_set.sort() + mbtiles_metadata = {} + for row in cursor.execute("SELECT name,value FROM metadata"): + mbtiles_metadata[row[0]] = row[1] + is_pbf = mbtiles_metadata["format"] == "pbf" + # query the db in ascending tile order for tileid in tileid_set: z, x, y = tileid_to_zxy(tileid) @@ -75,14 +80,10 @@ def mbtiles_to_pmtiles(input, output, maxzoom): ) data = res.fetchone()[0] # force gzip compression only for vector - if data[0:2] != b"\x1f\x8b": + if is_pbf and data[0:2] != b"\x1f\x8b": data = gzip.compress(data) writer.write_tile(tileid, data) - mbtiles_metadata = {} - for row in cursor.execute("SELECT name,value FROM metadata"): - mbtiles_metadata[row[0]] = row[1] - pmtiles_header, pmtiles_metadata = mbtiles_to_header_json(mbtiles_metadata) if maxzoom: pmtiles_header["max_zoom"] = int(maxzoom)