mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
Merge pull request #204 from protomaps/python-pmtiles-to-mbtiles-metadata
python pmtiles-to-mbtiles: lift vector_layers and tilestats into json…
This commit is contained in:
@@ -128,11 +128,24 @@ def pmtiles_to_mbtiles(input, output):
|
|||||||
if header["tile_type"] == TileType.MVT:
|
if header["tile_type"] == TileType.MVT:
|
||||||
metadata["format"] = "pbf"
|
metadata["format"] = "pbf"
|
||||||
|
|
||||||
|
json_metadata = {}
|
||||||
for k, v in metadata.items():
|
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)
|
v = json.dumps(v, ensure_ascii=False)
|
||||||
cursor.execute("INSERT INTO metadata VALUES(?,?)", (k, v))
|
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):
|
for zxy, tile_data in all_tiles(source):
|
||||||
flipped_y = (1 << zxy[0]) - 1 - zxy[2]
|
flipped_y = (1 << zxy[0]) - 1 - zxy[2]
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
import sqlite3
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import os
|
import os
|
||||||
|
import json
|
||||||
from pmtiles.writer import Writer
|
from pmtiles.writer import Writer
|
||||||
from pmtiles.reader import Reader, MemorySource
|
from pmtiles.reader import Reader, MemorySource
|
||||||
from pmtiles.convert import (
|
from pmtiles.convert import (
|
||||||
@@ -51,10 +53,19 @@ class TestConvert(unittest.TestCase):
|
|||||||
"center_lon_e7": 0,
|
"center_lon_e7": 0,
|
||||||
"center_lat_e7": 0,
|
"center_lat_e7": 0,
|
||||||
},
|
},
|
||||||
{"": "value"},
|
{"vector_layers": ['vector','layers'],
|
||||||
|
"tilestats":{'tile':'stats'}},
|
||||||
)
|
)
|
||||||
|
|
||||||
pmtiles_to_mbtiles("test_tmp.pmtiles", "test_tmp.mbtiles")
|
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)
|
mbtiles_to_pmtiles("test_tmp.mbtiles", "test_tmp_2.pmtiles", 3)
|
||||||
|
|
||||||
def test_mbtiles_header(self):
|
def test_mbtiles_header(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user