python pmtiles-to-mbtiles: lift vector_layers and tilestats into json metadata key [#120]

This commit is contained in:
Brandon Liu
2023-06-22 15:34:38 +08:00
parent 56f5a7c179
commit c6dbd0e4fd
2 changed files with 26 additions and 2 deletions

View File

@@ -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(

View File

@@ -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):