diff --git a/python/pmtiles/convert.py b/python/pmtiles/convert.py index bc7c82a..0c2192f 100644 --- a/python/pmtiles/convert.py +++ b/python/pmtiles/convert.py @@ -128,11 +128,24 @@ def pmtiles_to_mbtiles(input, output): if header["tile_type"] == TileType.MVT: metadata["format"] = "pbf" + json_metadata = {} for k, v in metadata.items(): - if not isinstance(v, str): + if k == "vector_layers": + json_metadata["vector_layers"] = v + continue + elif k == "tilestats": + json_metadata["tilestats"] = v + continue + elif not isinstance(v, str): v = json.dumps(v, ensure_ascii=False) cursor.execute("INSERT INTO metadata VALUES(?,?)", (k, v)) + if len(json_metadata) > 0: + cursor.execute( + "INSERT INTO metadata VALUES(?,?)", + ("json", json.dumps(json_metadata, ensure_ascii=False)), + ) + for zxy, tile_data in all_tiles(source): flipped_y = (1 << zxy[0]) - 1 - zxy[2] cursor.execute( diff --git a/python/test/test_convert.py b/python/test/test_convert.py index 8894cef..0154067 100644 --- a/python/test/test_convert.py +++ b/python/test/test_convert.py @@ -1,6 +1,8 @@ import unittest +import sqlite3 from io import BytesIO import os +import json from pmtiles.writer import Writer from pmtiles.reader import Reader, MemorySource from pmtiles.convert import ( @@ -51,10 +53,19 @@ class TestConvert(unittest.TestCase): "center_lon_e7": 0, "center_lat_e7": 0, }, - {"": "value"}, + {"vector_layers": ['vector','layers'], + "tilestats":{'tile':'stats'}}, ) pmtiles_to_mbtiles("test_tmp.pmtiles", "test_tmp.mbtiles") + conn = sqlite3.connect('test_tmp.mbtiles') + cursor = conn.cursor() + res = cursor.execute("SELECT value from metadata where name = 'json'") + data = res.fetchone()[0] + json_metadata = json.loads(data) + self.assertEqual(json_metadata['vector_layers'], ['vector', 'layers']) + self.assertEqual(json_metadata['tilestats'], {'tile':'stats'}) + mbtiles_to_pmtiles("test_tmp.mbtiles", "test_tmp_2.pmtiles", 3) def test_mbtiles_header(self):