diff --git a/Dockerfile b/Dockerfile index e7c7a789..808b8e7c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,8 @@ FROM python:3.6 RUN apt-get update \ && apt-get install -y --no-install-recommends \ - graphviz \ + graphviz \ + sqlite3 \ && rm -rf /var/lib/apt/lists/ RUN mkdir -p /usr/src/app diff --git a/Dockerfile.py27 b/Dockerfile.py27 index cf2dcaae..b4edd75f 100644 --- a/Dockerfile.py27 +++ b/Dockerfile.py27 @@ -2,7 +2,8 @@ FROM python:2.7 RUN apt-get update \ && apt-get install -y --no-install-recommends \ - graphviz \ + graphviz \ + sqlite3 \ && rm -rf /var/lib/apt/lists/ RUN mkdir -p /usr/src/app diff --git a/Makefile b/Makefile index c904f974..cca80624 100644 --- a/Makefile +++ b/Makefile @@ -35,4 +35,5 @@ buildtest: release: @echo "Release: $(VERSION)" docker build -f Dockerfile -t openmaptiles/openmaptiles-tools:$(VERSION) . - docker images | grep $(DOCKER_IMAGE) | grep -v $(DOCKER_IMAGE_PY27) | grep $(VERSION) + docker build -f Dockerfile -t openmaptiles/openmaptiles-tools:latest . + docker images | grep $(DOCKER_IMAGE) | grep -v $(DOCKER_IMAGE_PY27) \ No newline at end of file diff --git a/README.md b/README.md index 6efa2771..2cd31763 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,16 @@ Check out the [OpenMapTiles project](https://github.com/openmaptiles/openmaptile ## Install You need Python 2 or Python 3 installed on your system. +External dependency: graphviz, sqlite3 ``` pip install openmaptiles-tools # As long as we are not published to PyPI you can install directly from git pip install git+https://github.com/openmaptiles/openmaptiles-tools + +#Some tool call external command, you can install them on debian / ubuntu : +apt-get install graphviz sqlite3 + ``` ## Concepts @@ -105,6 +110,8 @@ generate-doc ### Generate ETL (Extract-Transform-Load ) graph +dependency: graphviz + Takes a source code from the imposm3 mapping file and the SQL postprocessing code , nad parsing for the `etldoc:` graphviz based comments, and generate an svg file. The `.dot` and the `.svg` filename prefix is `etl_` @@ -131,5 +138,11 @@ example: generate-sqlquery layers/landcover/landcover.yaml 14 ``` +### Add simple metadata to mbtiles file +dependency: sqlite3 +example: +``` +generate_metadata ./data/tiles.mbtiles +``` diff --git a/VERSION b/VERSION index 2f453618..1d71ef97 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2 \ No newline at end of file +0.3 \ No newline at end of file diff --git a/bin/generate-metadata b/bin/generate-metadata new file mode 100755 index 00000000..757276ff --- /dev/null +++ b/bin/generate-metadata @@ -0,0 +1,110 @@ +#!/usr/bin/env python +"""generate metadata to tiles.mbtiles + +Usage: + generate_metadata + generate_metadata (-h | --help) + generate_metadata --version + +Options: + -h --help Show this screen. + --version Show version. +""" + +# generate_metadata ./data/tiles.mbtiles + +# TODO: better BBOX parameters .. +# TODO: test! + +from __future__ import print_function + +import shutil +import sqlite3 +import sys +import os +import os.path +from docopt import docopt +import openmaptiles + +ATTRIBUTION = os.environ.get('METADATA_ATTRIBUTION', '© OpenMapTiles © OpenStreetMap contributors') +VERSION = os.environ.get('METADATA_VERSION', '3.3') + + +class Extract(object): + + def __init__(self, extract, country, city, top, left, bottom, right, + min_zoom=0, max_zoom=14, center_zoom=10): + self.extract = extract + self.country = country + self.city = city + + self.min_lon = left + self.min_lat = bottom + self.max_lon = right + self.max_lat = top + + self.min_zoom = min_zoom + self.max_zoom = max_zoom + self.center_zoom = center_zoom + + def bounds(self): + return '{},{},{},{}'.format(self.min_lon, self.min_lat, + self.max_lon, self.max_lat) + + def center(self): + center_lon = (self.min_lon + self.max_lon) / 2.0 + center_lat = (self.min_lat + self.max_lat) / 2.0 + return '{},{},{}'.format(center_lon, center_lat, self.center_zoom) + + def metadata(self, extract_file): + return { + "type": os.environ.get('METADATA_TYPE', 'baselayer'), + "attribution": ATTRIBUTION, + "version": VERSION, + "minzoom": self.min_zoom, + "maxzoom": self.max_zoom, + "name": os.environ.get('METADATA_NAME', 'OpenMapTiles'), + "id": os.environ.get('METADATA_ID', 'openmaptiles'), + "description": os.environ.get('METADATA_DESC', "Development extract, based on http://openmaptiles.org"), + "bounds": self.bounds(), + "center": self.center(), + "basename": os.path.basename(extract_file), + "filesize": os.path.getsize(extract_file) + } + +def update_metadata(mbtiles_file, metadata): + """ + Update metadata key value pairs inside the MBTiles file + with the provided metadata + """ + conn = sqlite3.connect(mbtiles_file) + + def upsert_entry(key, value): + conn.execute("DELETE FROM metadata WHERE name='{}'".format(key)) + conn.execute("INSERT INTO metadata VALUES('{}', '{}')".format(key, value)) + + for key, value in metadata.items(): + upsert_entry(key, value) + + conn.commit() + conn.close() + +if __name__ == '__main__': + args = docopt(__doc__, version=openmaptiles.__version__) + + extract_file= args[''] + + extract = Extract(extract_file, + country=None, + city=None, + left=-180, + right=180, + top=85.0511, + bottom=-85.0511, + center_zoom=2, + min_zoom= os.environ.get('QUICKSTART_MIN_ZOOM', 0), + max_zoom= os.environ.get('QUICKSTART_MAX_ZOOM', 14), + ) + + print('Update metadata {}'.format(extract_file)) + update_metadata(extract_file, extract.metadata(extract_file)) diff --git a/setup.py b/setup.py index aa6893d8..e1b5aaa6 100644 --- a/setup.py +++ b/setup.py @@ -7,13 +7,14 @@ license='MIT', long_description=open('README.md').read(), scripts=[ - 'bin/generate-tm2source', - 'bin/generate-imposm3', - 'bin/generate-sql', - 'bin/generate-sqlquery', 'bin/generate-doc', 'bin/generate-etlgraph', + 'bin/generate-imposm3', 'bin/generate-mapping-graph', + 'bin/generate-metadata', + 'bin/generate-sql', + 'bin/generate-sqlquery', + 'bin/generate-tm2source', ], install_requires=[ 'docopt',