mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-03-21 22:39:39 +00:00
python v3.7 (#639)
* add unit test for mbtiles missing center/bounds * code and file cleanup * more details in python README.md
This commit is contained in:
@@ -1,6 +1,21 @@
|
|||||||
# pmtiles
|
# pmtiles
|
||||||
|
|
||||||
`pip install pmtiles`
|
```sh
|
||||||
|
pip install pmtiles
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running Tests
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python -m unittest test/test_*
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uploading build
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python -m build
|
||||||
|
twine upload dist/*
|
||||||
|
```
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
|
|||||||
@@ -223,9 +223,11 @@ def disk_to_pmtiles(directory_path, output, maxzoom, **kwargs):
|
|||||||
Licensed under BSD 3-Clause
|
Licensed under BSD 3-Clause
|
||||||
"""
|
"""
|
||||||
verbose = kwargs.get("verbose")
|
verbose = kwargs.get("verbose")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
metadata = json.load(open(os.path.join(directory_path, 'metadata.json'), 'r'))
|
with open(os.path.join(directory_path, "metadata.json")) as f:
|
||||||
except IOError:
|
metadata = json.load(f)
|
||||||
|
except FileNotFoundError:
|
||||||
raise Exception("metadata.json not found in directory")
|
raise Exception("metadata.json not found in directory")
|
||||||
|
|
||||||
tile_format = kwargs.get('tile_format', metadata.get("format"))
|
tile_format = kwargs.get('tile_format', metadata.get("format"))
|
||||||
@@ -321,6 +323,7 @@ def disk_to_pmtiles(directory_path, output, maxzoom, **kwargs):
|
|||||||
print(" Begin writing %s to .pmtiles ..." % (n_tiles), flush=True)
|
print(" Begin writing %s to .pmtiles ..." % (n_tiles), flush=True)
|
||||||
for tileid, filepath in tileid_path_set:
|
for tileid, filepath in tileid_path_set:
|
||||||
f = open(filepath, 'rb')
|
f = open(filepath, 'rb')
|
||||||
|
try:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
# force gzip compression only for vector
|
# force gzip compression only for vector
|
||||||
if is_pbf and data[0:2] != b"\x1f\x8b":
|
if is_pbf and data[0:2] != b"\x1f\x8b":
|
||||||
@@ -329,6 +332,8 @@ def disk_to_pmtiles(directory_path, output, maxzoom, **kwargs):
|
|||||||
count = count + 1
|
count = count + 1
|
||||||
if verbose and (count % count_step) == 0:
|
if verbose and (count % count_step) == 0:
|
||||||
print(" %s tiles inserted of %s" % (count, n_tiles), flush=True)
|
print(" %s tiles inserted of %s" % (count, n_tiles), flush=True)
|
||||||
|
finally:
|
||||||
|
f.close()
|
||||||
|
|
||||||
if verbose and (count % count_step) != 0:
|
if verbose and (count % count_step) != 0:
|
||||||
print(" %s tiles inserted of %s" % (count, n_tiles))
|
print(" %s tiles inserted of %s" % (count, n_tiles))
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="pmtiles",
|
name="pmtiles",
|
||||||
version="3.6.0",
|
version="3.7.0",
|
||||||
author="Brandon Liu",
|
author="Brandon Liu",
|
||||||
author_email="brandon@protomaps.com",
|
author_email="brandon@protomaps.com",
|
||||||
description="Library and utilities to write and read PMTiles archives - cloud-optimized archives of map tiles.",
|
description="Library and utilities to write and read PMTiles archives - cloud-optimized archives of map tiles.",
|
||||||
|
|||||||
@@ -116,14 +116,14 @@ class TestConvert(unittest.TestCase):
|
|||||||
"json": '{"vector_layers":[{"abc":123}],"tilestats":{"def":456}}',
|
"json": '{"vector_layers":[{"abc":123}],"tilestats":{"def":456}}',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.assertEqual(header["min_lon_e7"], -180 * 10000000)
|
self.assertEqual(header["min_lon_e7"], -180 * 1e7)
|
||||||
self.assertTrue(isinstance(header["min_lon_e7"], int))
|
self.assertTrue(isinstance(header["min_lon_e7"], int))
|
||||||
self.assertEqual(header["min_lat_e7"], -85 * 10000000)
|
self.assertEqual(header["min_lat_e7"], -85 * 1e7)
|
||||||
self.assertEqual(header["max_lon_e7"], 180 * 10000000)
|
self.assertEqual(header["max_lon_e7"], 180 * 1e7)
|
||||||
self.assertEqual(header["max_lat_e7"], 85 * 10000000)
|
self.assertEqual(header["max_lat_e7"], 85 * 1e7)
|
||||||
self.assertEqual(header["tile_type"], TileType.MVT)
|
self.assertEqual(header["tile_type"], TileType.MVT)
|
||||||
self.assertEqual(header["center_lon_e7"], -122.1906 * 10000000)
|
self.assertEqual(header["center_lon_e7"], -122.1906 * 1e7)
|
||||||
self.assertEqual(header["center_lat_e7"], 37.7599 * 10000000)
|
self.assertEqual(header["center_lat_e7"], 37.7599 * 1e7)
|
||||||
self.assertEqual(header["center_zoom"], 11)
|
self.assertEqual(header["center_zoom"], 11)
|
||||||
self.assertEqual(header["min_zoom"], 1)
|
self.assertEqual(header["min_zoom"], 1)
|
||||||
self.assertEqual(header["max_zoom"], 2)
|
self.assertEqual(header["max_zoom"], 2)
|
||||||
@@ -132,3 +132,24 @@ class TestConvert(unittest.TestCase):
|
|||||||
self.assertTrue("name" in json_metadata)
|
self.assertTrue("name" in json_metadata)
|
||||||
self.assertTrue("format" in json_metadata)
|
self.assertTrue("format" in json_metadata)
|
||||||
self.assertTrue("compression" in json_metadata)
|
self.assertTrue("compression" in json_metadata)
|
||||||
|
|
||||||
|
def test_mbtiles_missing_bounds_center(self):
|
||||||
|
header, json_metadata = mbtiles_to_header_json(
|
||||||
|
{
|
||||||
|
"name": "test_name",
|
||||||
|
"format": "pbf",
|
||||||
|
"minzoom": "1",
|
||||||
|
"maxzoom": "2",
|
||||||
|
"attribution": "<div>abc</div>",
|
||||||
|
"compression": "gzip",
|
||||||
|
"json": '{"vector_layers":[{"abc":123}],"tilestats":{"def":456}}',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.assertEqual(header["min_lon_e7"], -180 * 1e7)
|
||||||
|
self.assertTrue(isinstance(header["min_lon_e7"], int))
|
||||||
|
self.assertEqual(header["min_lat_e7"], -850511287)
|
||||||
|
self.assertEqual(header["max_lon_e7"], 180 * 1e7)
|
||||||
|
self.assertEqual(header["max_lat_e7"], 850511287)
|
||||||
|
self.assertEqual(header["center_lon_e7"], 0)
|
||||||
|
self.assertEqual(header["center_lat_e7"], 0)
|
||||||
|
self.assertEqual(header["center_zoom"], 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user