openmaptiles/Makefile

261 wiersze
11 KiB
Makefile
Czysty Zwykły widok Historia

# Options to run with docker and docker-compose - ensure the container is destroyed on exit
DC_OPTS?=--rm
# container runs as the current user rather than root (so that created files are not root-owned)
DC_USER_OPTS?=$(DC_OPTS) -u $$(id -u $${USER}):$$(id -g $${USER})
# If running in the test mode, compare files rather than copy them
TEST_MODE?=no
ifeq ($(TEST_MODE),yes)
# create images in ./build/devdoc and compare them to ./layers
GRAPH_PARAMS=./build/devdoc ./layers
else
# update graphs in the ./layers dir
GRAPH_PARAMS=./layers
endif
.PHONY: all
2016-10-28 19:56:39 +00:00
all: build/openmaptiles.tm2source/data.yml build/mapping.yaml build/tileset.sql
.PHONY: help
2016-11-30 04:39:06 +00:00
help:
@echo "=============================================================================="
@echo " OpenMapTiles https://github.com/openmaptiles/openmaptiles "
@echo "Hints for testing areas "
@echo " make download-geofabrik-list # list actual geofabrik OSM extracts for download -> <<your-area>> "
@echo " make list # list actual geofabrik OSM extracts for download -> <<your-area>> "
@echo " ./quickstart.sh <<your-area>> # example: ./quickstart.sh madagascar "
@echo " "
@echo "Hints for designers:"
@echo " make start-postserve # start Postserver + Maputnik Editor [ see localhost:8088 ] "
2017-01-08 12:31:24 +00:00
@echo " make start-tileserver # start klokantech/tileserver-gl [ see localhost:8080 ] "
2016-11-30 04:39:06 +00:00
@echo " "
@echo "Hints for developers:"
@echo " make # build source code"
2016-11-30 04:39:06 +00:00
@echo " make download-geofabrik area=albania # download OSM data from geofabrik, and create config file"
@echo " make psql # start PostgreSQL console"
@echo " make psql-list-tables # list all PostgreSQL tables"
@echo " make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE"
@echo " make psql-analyze # PostgreSQL: ANALYZE"
@echo " make generate-qareports # generate reports [./build/qareports]"
@echo " make generate-devdoc # generate devdoc including graphs for all layers [./layers/...]"
@echo " make import-sql-dev # start import-sql /bin/bash terminal"
@echo " make import-osm-dev # start import-osm /bin/bash terminal (imposm3)"
@echo " make clean-docker # remove docker containers, PG data volume"
@echo " make forced-clean-sql # drop all PostgreSQL tables for clean environment"
2016-12-06 17:43:32 +00:00
@echo " make docker-unnecessary-clean # clean unnecessary docker image(s) and container(s)"
2016-11-30 04:39:06 +00:00
@echo " make refresh-docker-images # refresh openmaptiles docker images from Docker HUB"
@echo " make remove-docker-images # remove openmaptiles docker images"
@echo " make pgclimb-list-views # list PostgreSQL public schema views"
@echo " make pgclimb-list-tables # list PostgreSQL public schema tables"
@echo " cat .env # list PG database and MIN_ZOOM and MAX_ZOOM information"
@echo " cat quickstart.log # backup of the last ./quickstart.sh"
@echo " make help # help about available commands"
2016-11-30 04:39:06 +00:00
@echo "=============================================================================="
.PHONY: build
build:
mkdir -p build
build/openmaptiles.tm2source/data.yml: build
mkdir -p build/openmaptiles.tm2source
docker-compose run $(DC_OPTS) openmaptiles-tools generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > $@
build/mapping.yaml: build
docker-compose run $(DC_OPTS) openmaptiles-tools generate-imposm3 openmaptiles.yaml > $@
build/tileset.sql: build
Declared field mapping 2 (#734) Make a few more mappings declarative, and removes values declared in both SQL and the yaml file. Here's the diff comparing `build/tileset.sql` in master vs the new PR. The changes are mostly stylistic, except when a nested `if` statement is expanded into individual `if ... and ...` conditions (logically identical) ```diff 55c55 diff --git a/build/tileset.sql b/build/tileset.sql index 4e59357..7c6c444 100644 --- a/build/tileset.sql +++ b/build/tileset.sql @@ -52,7 +52,7 @@ CREATE INDEX IF NOT EXISTS osm_ocean_polygon_gen4_idx ON osm_ocean_polygon_gen4 CREATE OR REPLACE FUNCTION water_class(waterway TEXT) RETURNS TEXT AS $$ SELECT CASE WHEN "waterway" IN ('', 'lake') THEN 'lake' - WHEN "waterway"='dock' THEN 'dock' + WHEN "waterway" = 'dock' THEN 'dock' ELSE 'river' END; $$ LANGUAGE SQL IMMUTABLE; @@ -1813,24 +1813,41 @@ CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT, co WHEN "highway" IN ('tertiary', 'tertiary_link') THEN 'tertiary' WHEN "highway" IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor' WHEN "highway" IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') - OR "public_transport"='platform' + OR "public_transport" = 'platform' THEN 'path' - WHEN "highway"='service' THEN 'service' - WHEN "highway"='track' THEN 'track' - WHEN "highway"='raceway' THEN 'raceway' - WHEN highway = 'construction' THEN CASE - WHEN construction IN ('motorway', 'motorway_link') THEN 'motorway_construction' - WHEN construction IN ('trunk', 'trunk_link') THEN 'trunk_construction' - WHEN construction IN ('primary', 'primary_link') THEN 'primary_construction' - WHEN construction IN ('secondary', 'secondary_link') THEN 'secondary_construction' - WHEN construction IN ('tertiary', 'tertiary_link') THEN 'tertiary_construction' - WHEN construction IN ('', 'unclassified', 'residential', 'living_street', 'road') THEN 'minor_construction' - WHEN construction IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') - OR public_transport = 'platform' THEN 'path_construction' - WHEN construction = 'service' THEN 'service_construction' - WHEN construction = 'track' THEN 'track_construction' - WHEN construction = 'raceway' THEN 'raceway_construction' - END + WHEN "highway" = 'service' THEN 'service' + WHEN "highway" = 'track' THEN 'track' + WHEN "highway" = 'raceway' THEN 'raceway' + WHEN "highway" = 'construction' + AND "construction" IN ('motorway', 'motorway_link') + THEN 'motorway_construction' + WHEN "highway" = 'construction' + AND "construction" IN ('trunk', 'trunk_link') + THEN 'trunk_construction' + WHEN "highway" = 'construction' + AND "construction" IN ('primary', 'primary_link') + THEN 'primary_construction' + WHEN "highway" = 'construction' + AND "construction" IN ('secondary', 'secondary_link') + THEN 'secondary_construction' + WHEN "highway" = 'construction' + AND "construction" IN ('tertiary', 'tertiary_link') + THEN 'tertiary_construction' + WHEN "highway" = 'construction' + AND "construction" IN ('', 'unclassified', 'residential', 'living_street', 'road') + THEN 'minor_construction' + WHEN "highway" = 'construction' + AND ("construction" IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR "public_transport" = 'platform') + THEN 'path_construction' + WHEN "highway" = 'construction' + AND "construction" = 'service' + THEN 'service_construction' + WHEN "highway" = 'construction' + AND "construction" = 'track' + THEN 'track_construction' + WHEN "highway" = 'construction' + AND "construction" = 'raceway' + THEN 'raceway_construction' END; $$ LANGUAGE SQL IMMUTABLE; @@ -4073,6 +4090,12 @@ RETURNS TEXT AS $$ WHEN "subclass" IN ('fast_food', 'food_court') THEN 'fast_food' WHEN "subclass" IN ('park', 'bbq') THEN 'park' WHEN "subclass" IN ('bus_stop', 'bus_station') THEN 'bus' + WHEN ("subclass" = 'station' AND "mapping_key" = 'railway') + OR "subclass" IN ('halt', 'tram_stop', 'subway') + THEN 'railway' + WHEN "subclass" = 'station' + AND "mapping_key" = 'aerialway' + THEN 'aerialway' WHEN "subclass" IN ('subway_entrance', 'train_station_entrance') THEN 'entrance' WHEN "subclass" IN ('camp_site', 'caravan_site') THEN 'campsite' WHEN "subclass" IN ('laundry', 'dry_cleaning') THEN 'laundry' @@ -4082,7 +4105,7 @@ RETURNS TEXT AS $$ WHEN "subclass" IN ('hotel', 'motel', 'bed_and_breakfast', 'guest_house', 'hostel', 'chalet', 'alpine_hut', 'dormitory') THEN 'lodging' WHEN "subclass" IN ('chocolate', 'confectionery') THEN 'ice_cream' WHEN "subclass" IN ('post_box', 'post_office') THEN 'post' - WHEN "subclass"='cafe' THEN 'cafe' + WHEN "subclass" = 'cafe' THEN 'cafe' WHEN "subclass" IN ('school', 'kindergarten') THEN 'school' WHEN "subclass" IN ('alcohol', 'beverages', 'wine') THEN 'alcohol_shop' WHEN "subclass" IN ('bar', 'nightclub') THEN 'bar' @@ -4098,9 +4121,6 @@ RETURNS TEXT AS $$ WHEN "subclass" IN ('bag', 'clothes') THEN 'clothing_store' WHEN "subclass" IN ('swimming_area', 'swimming') THEN 'swimming' WHEN "subclass" IN ('castle', 'ruins') THEN 'castle' - WHEN (subclass = 'station' AND mapping_key = 'railway') - OR (subclass IN ('halt', 'tram_stop', 'subway')) THEN 'railway' - WHEN (subclass = 'station' AND mapping_key = 'aerialway') THEN 'aerialway' ELSE subclass END; $$ LANGUAGE SQL IMMUTABLE; @@ -4301,22 +4321,22 @@ $$ COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, CASE - WHEN "aerodrome"='international' - OR "aerodrome_type"='international' + WHEN "aerodrome" = 'international' + OR "aerodrome_type" = 'international' THEN 'international' - WHEN "aerodrome"='public' - OR "aerodrome_type"='civil' + WHEN "aerodrome" = 'public' + OR "aerodrome_type" = 'civil' OR "aerodrome_type" LIKE '%public%' THEN 'public' - WHEN "aerodrome"='regional' - OR "aerodrome_type"='regional' + WHEN "aerodrome" = 'regional' + OR "aerodrome_type" = 'regional' THEN 'regional' - WHEN "aerodrome"='military' + WHEN "aerodrome" = 'military' OR "aerodrome_type" LIKE '%military%' - OR "military"='airfield' + OR "military" = 'airfield' THEN 'military' - WHEN "aerodrome"='private' - OR "aerodrome_type"='private' + WHEN "aerodrome" = 'private' + OR "aerodrome_type" = 'private' THEN 'private' ELSE 'other' END AS class, ```
2020-01-31 05:22:21 +00:00
# FIXME: switch to openmaptiles-tools after v3.2+ is published
docker-compose run $(DC_OPTS) openmaptiles-tools-latest generate-sql openmaptiles.yaml > $@
.PHONY: clean
clean:
rm -f build/openmaptiles.tm2source/data.yml && rm -f build/mapping.yaml && rm -f build/tileset.sql
.PHONY: clean-docker
2016-11-28 22:15:47 +00:00
clean-docker:
docker-compose down -v --remove-orphans
docker-compose rm -fv
docker volume ls -q | grep openmaptiles | xargs -r docker volume rm || true
.PHONY: db-start
db-start:
docker-compose up -d postgres
@echo "Wait for PostgreSQL to start..."
docker-compose run $(DC_OPTS) import-osm ./pgwait.sh
.PHONY: download-geofabrik
download-geofabrik:
2016-11-28 23:27:44 +00:00
@echo =============== download-geofabrik =======================
@echo Download area : $(area)
2016-11-28 23:53:52 +00:00
@echo [[ example: make download-geofabrik area=albania ]]
2016-11-28 23:27:44 +00:00
@echo [[ list areas: make download-geofabrik-list ]]
docker-compose run $(DC_OPTS) import-osm ./download-geofabrik.sh $(area)
2016-11-28 23:27:44 +00:00
ls -la ./data/$(area).*
@echo "Generated config file: ./data/docker-compose-config.yml"
@echo " "
cat ./data/docker-compose-config.yml
@echo " "
2016-11-28 23:27:44 +00:00
.PHONY: psql
psql: db-start
docker-compose run $(DC_OPTS) import-osm ./psql.sh
2017-11-10 20:28:12 +00:00
.PHONY: import-osm
import-osm: db-start all
docker-compose run $(DC_OPTS) import-osm
2018-01-16 08:53:59 +00:00
.PHONY: import-sql
import-sql: db-start all
docker-compose run $(DC_OPTS) openmaptiles-tools import-sql
.PHONY: import-osmsql
import-osmsql: db-start all
docker-compose run $(DC_OPTS) import-osm
docker-compose run $(DC_OPTS) openmaptiles-tools import-sql
2018-01-16 08:53:59 +00:00
.PHONY: generate-tiles
generate-tiles: db-start all
2018-01-16 08:53:59 +00:00
rm -rf data/tiles.mbtiles
if [ -f ./data/docker-compose-config.yml ]; then \
docker-compose -f docker-compose.yml -f ./data/docker-compose-config.yml run $(DC_OPTS) generate-vectortiles; \
else \
docker-compose run $(DC_OPTS) generate-vectortiles; \
fi
docker-compose run $(DC_OPTS) openmaptiles-tools generate-metadata ./data/tiles.mbtiles
docker-compose run $(DC_OPTS) openmaptiles-tools chmod 666 ./data/tiles.mbtiles
.PHONY: start-tileserver
2017-01-08 12:31:24 +00:00
start-tileserver:
2017-01-11 08:46:19 +00:00
@echo " "
2017-01-08 12:31:24 +00:00
@echo "***********************************************************"
2017-01-11 08:46:19 +00:00
@echo "* "
@echo "* Download/refresh klokantech/tileserver-gl docker image"
@echo "* see documentation: https://github.com/klokantech/tileserver-gl"
@echo "* "
2017-01-08 12:31:24 +00:00
@echo "***********************************************************"
2017-01-11 08:46:19 +00:00
@echo " "
2017-01-08 12:31:24 +00:00
docker pull klokantech/tileserver-gl
2017-01-11 08:46:19 +00:00
@echo " "
2017-01-08 12:31:24 +00:00
@echo "***********************************************************"
2017-01-11 08:46:19 +00:00
@echo "* "
2017-01-08 12:31:24 +00:00
@echo "* Start klokantech/tileserver-gl "
@echo "* ----------------------------> check localhost:8080 "
2017-01-11 08:46:19 +00:00
@echo "* "
2017-01-08 12:31:24 +00:00
@echo "***********************************************************"
@echo " "
docker run $(DC_OPTS) -it --name tileserver-gl -v $$(pwd)/data:/data -p 8080:80 klokantech/tileserver-gl
.PHONY: start-postserve
start-postserve: db-start
@echo " "
@echo "***********************************************************"
@echo "* "
@echo "* Bring up postserve at localhost:8090"
@echo "* "
@echo "***********************************************************"
@echo " "
docker-compose up -d postserve
docker pull maputnik/editor
@echo " "
@echo "***********************************************************"
@echo "* "
@echo "* Start maputnik/editor "
@echo "* ---> go to http://localhost:8088"
@echo "* ---> set 'data source' to http://localhost:8090"
@echo "* "
@echo "***********************************************************"
@echo " "
docker rm -f maputnik_editor || true
docker run $(DC_OPTS) --name maputnik_editor -d -p 8088:8888 maputnik/editor
.PHONY: generate-qareports
generate-qareports:
./qa/run.sh
# generate all etl and mapping graphs
.PHONY: generate-devdoc
generate-devdoc:
mkdir -p ./build/devdoc && \
docker-compose run $(DC_USER_OPTS) openmaptiles-tools-latest sh -c \
'generate-etlgraph openmaptiles.yaml $(GRAPH_PARAMS) && \
generate-mapping-graph openmaptiles.yaml $(GRAPH_PARAMS)'
.PHONY: import-sql-dev
import-sql-dev:
docker-compose run $(DC_OPTS) openmaptiles-tools bash
.PHONY: import-osm-dev
import-osm-dev:
docker-compose run $(DC_OPTS) import-osm /bin/bash
# the `download-geofabrik` error message mention `list`, if the area parameter is wrong. so I created a similar make command
.PHONY: list
list:
docker-compose run $(DC_OPTS) import-osm ./download-geofabrik-list.sh
# same as a `make list`
.PHONY: download-geofabrik-list
download-geofabrik-list:
docker-compose run $(DC_OPTS) import-osm ./download-geofabrik-list.sh
.PHONY: import-wikidata
import-wikidata:
# FIXME: switch to openmaptiles-tools after v3.2+ is published
docker-compose run $(DC_OPTS) openmaptiles-tools-latest import-wikidata openmaptiles.yaml
.PHONY: psql-list-tables
psql-list-tables:
docker-compose run $(DC_OPTS) import-osm ./psql.sh -P pager=off -c "\d+"
.PHONY: psql-pg-stat-reset
psql-pg-stat-reset:
docker-compose run $(DC_OPTS) import-osm ./psql.sh -P pager=off -c 'SELECT pg_stat_statements_reset();'
.PHONY: forced-clean-sql
forced-clean-sql:
docker-compose run $(DC_OPTS) import-osm ./psql.sh -c "DROP SCHEMA IF EXISTS public CASCADE ; CREATE SCHEMA IF NOT EXISTS public; "
docker-compose run $(DC_OPTS) import-osm ./psql.sh -c "CREATE EXTENSION hstore; CREATE EXTENSION postgis; CREATE EXTENSION unaccent; CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION osml10n; CREATE EXTENSION pg_stat_statements;"
docker-compose run $(DC_OPTS) import-osm ./psql.sh -c "GRANT ALL ON SCHEMA public TO public;COMMENT ON SCHEMA public IS 'standard public schema';"
.PHONY: pgclimb-list-views
pgclimb-list-views:
docker-compose run $(DC_OPTS) import-osm ./pgclimb.sh -c "select schemaname,viewname from pg_views where schemaname='public' order by viewname;" csv
.PHONY: pgclimb-list-tables
pgclimb-list-tables:
docker-compose run $(DC_OPTS) import-osm ./pgclimb.sh -c "select schemaname,tablename from pg_tables where schemaname='public' order by tablename;" csv
.PHONY: psql-vacuum-analyze
psql-vacuum-analyze:
@echo "Start - postgresql: VACUUM ANALYZE VERBOSE;"
docker-compose run $(DC_OPTS) import-osm ./psql.sh -P pager=off -c 'VACUUM ANALYZE VERBOSE;'
.PHONY: psql-analyze
psql-analyze:
@echo "Start - postgresql: ANALYZE VERBOSE ;"
docker-compose run $(DC_OPTS) import-osm ./psql.sh -P pager=off -c 'ANALYZE VERBOSE;'
.PHONY: list-docker-images
list-docker-images:
docker images | grep openmaptiles
.PHONY: refresh-docker-images
refresh-docker-images:
docker-compose pull --ignore-pull-failures
.PHONY: remove-docker-images
remove-docker-images:
@echo "Deleting all openmaptiles related docker image(s)..."
@docker-compose down
@docker images | grep "openmaptiles" | awk -F" " '{print $$3}' | xargs --no-run-if-empty docker rmi -f
@docker images | grep "osm2vectortiles/mapbox-studio" | awk -F" " '{print $$3}' | xargs --no-run-if-empty docker rmi -f
@docker images | grep "klokantech/tileserver-gl" | awk -F" " '{print $$3}' | xargs --no-run-if-empty docker rmi -f
.PHONY: docker-unnecessary-clean
docker-unnecessary-clean:
@echo "Deleting unnecessary container(s)..."
@docker ps -a | grep Exited | awk -F" " '{print $$1}' | xargs --no-run-if-empty docker rm
@echo "Deleting unnecessary image(s)..."
@docker images | grep \<none\> | awk -F" " '{print $$3}' | xargs --no-run-if-empty docker rmi