kopia lustrzana https://github.com/openmaptiles/openmaptiles
				
				
				
			
		
			
				
	
	
		
			364 wiersze
		
	
	
		
			14 KiB
		
	
	
	
		
			Makefile
		
	
	
			
		
		
	
	
			364 wiersze
		
	
	
		
			14 KiB
		
	
	
	
		
			Makefile
		
	
	
| # Ensure that errors don't hide inside pipes
 | |
| SHELL         = /bin/bash
 | |
| .SHELLFLAGS   = -o pipefail -c
 | |
| 
 | |
| # Options to run with docker and docker-compose - ensure the container is destroyed on exit
 | |
| # Containers run as the current user rather than root (so that created files are not root-owned)
 | |
| DC_OPTS?=--rm -u $(shell id -u):$(shell id -g)
 | |
| 
 | |
| # If set to a non-empty value, will use postgis-preloaded instead of postgis docker image
 | |
| USE_PRELOADED_IMAGE?=
 | |
| 
 | |
| # If set, this file will be imported in the import-osm target
 | |
| PBF_FILE?=
 | |
| 
 | |
| # Local port to use with postserve
 | |
| PPORT?=8090
 | |
| export PPORT
 | |
| # Local port to use with tileserver
 | |
| TPORT?=8080
 | |
| export TPORT
 | |
| 
 | |
| # Allow a custom docker-compose project name
 | |
| ifeq ($(strip $(DC_PROJECT)),)
 | |
|   override DC_PROJECT:=$(notdir $(shell pwd))
 | |
|   DOCKER_COMPOSE:= docker-compose
 | |
| else
 | |
|   DOCKER_COMPOSE:= docker-compose --project-name $(DC_PROJECT)
 | |
| endif
 | |
| 
 | |
| # Make some operations quieter (e.g. inside the test script)
 | |
| ifeq ($(strip $(QUIET)),)
 | |
|   QUIET_FLAG:=
 | |
| else
 | |
|   QUIET_FLAG:=--quiet
 | |
| endif
 | |
| 
 | |
| # Use `xargs --no-run-if-empty` flag, if supported
 | |
| XARGS:=xargs $(shell xargs --no-run-if-empty </dev/null 2>/dev/null && echo --no-run-if-empty)
 | |
| 
 | |
| # 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
 | |
| all: init-dirs build/openmaptiles.tm2source/data.yml build/mapping.yaml build-sql
 | |
| 
 | |
| # Set OpenMapTiles host
 | |
| OMT_HOST:=http://$(firstword $(subst :, ,$(subst tcp://,,$(DOCKER_HOST))) localhost)
 | |
| 
 | |
| .PHONY: help
 | |
| help:
 | |
| 	@echo "=============================================================================="
 | |
| 	@echo " OpenMapTiles  https://github.com/openmaptiles/openmaptiles "
 | |
| 	@echo "Hints for testing areas                "
 | |
| 	@echo "  make list-geofabrik                  # 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-maputnik                  # start Maputnik Editor + dynamic tile server [ see $(OMT_HOST):8088 ]"
 | |
| 	@echo "  make start-postserve                 # start dynamic tile server                   [ see $(OMT_HOST):$(PPORT)} ]"
 | |
| 	@echo "  make start-tileserver                # start maptiler/tileserver-gl                [ see $(OMT_HOST):$(TPORT) ]"
 | |
| 	@echo " "
 | |
| 	@echo "Hints for developers:"
 | |
| 	@echo "  make                                 # build source code"
 | |
| 	@echo "  make list-geofabrik                  # list actual geofabrik OSM extracts for download"
 | |
| 	@echo "  make download-geofabrik area=albania # download OSM data from geofabrik,        and create config file"
 | |
| 	@echo "  make download-osmfr area=asia/qatar  # download OSM data from openstreetmap.fr, and create config file"
 | |
| 	@echo "  make download-bbike area=Amsterdam   # download OSM data from bbike.org,        and create config file"
 | |
| 	@echo "  make psql                            # start PostgreSQL console"
 | |
| 	@echo "  make psql-list-tables                # list all PostgreSQL tables"
 | |
| 	@echo "  make vacuum-db                       # PostgreSQL: VACUUM ANALYZE"
 | |
| 	@echo "  make analyze-db                      # PostgreSQL: ANALYZE"
 | |
| 	@echo "  make generate-qareports              # generate reports                                [./build/qareports]"
 | |
| 	@echo "  make generate-devdoc                 # generate devdoc including graphs for all layers [./layers/...]"
 | |
| 	@echo "  make bash                            # start openmaptiles-tools /bin/bash terminal"
 | |
| 	@echo "  make destroy-db                      # remove docker containers and PostgreSQL data volume"
 | |
| 	@echo "  make start-db                        # start PostgreSQL, creating it if it doesn't exist"
 | |
| 	@echo "  make start-db-preloaded              # start PostgreSQL, creating data-prepopulated one if it doesn't exist"
 | |
| 	@echo "  make stop-db                         # stop PostgreSQL database without destroying the data"
 | |
| 	@echo "  make clean-unnecessary-docker        # clean unnecessary docker image(s) and container(s)"
 | |
| 	@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                  # transcript of the last ./quickstart.sh run"
 | |
| 	@echo "  make help                            # help about available commands"
 | |
| 	@echo "=============================================================================="
 | |
| 
 | |
| .PHONY: init-dirs
 | |
| init-dirs:
 | |
| 	@mkdir -p build/sql
 | |
| 	@mkdir -p data
 | |
| 	@mkdir -p cache
 | |
| 
 | |
| build/openmaptiles.tm2source/data.yml: init-dirs
 | |
| 	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: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools generate-imposm3 openmaptiles.yaml > $@
 | |
| 
 | |
| .PHONY: build-sql
 | |
| build-sql: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools bash -c \
 | |
| 		'generate-sql openmaptiles.yaml --dir ./build/sql \
 | |
| 		&& generate-sqltomvt openmaptiles.yaml --key --postgis-ver 2.4.8 --function --fname=getmvt >> "./build/sql/run_last.sql"'
 | |
| 
 | |
| .PHONY: clean
 | |
| clean:
 | |
| 	rm -rf build
 | |
| 
 | |
| .PHONY: destroy-db
 | |
| destroy-db: override DC_PROJECT:=$(shell echo $(DC_PROJECT) | tr A-Z a-z)
 | |
| destroy-db:
 | |
| 	$(DOCKER_COMPOSE) down -v --remove-orphans
 | |
| 	$(DOCKER_COMPOSE) rm -fv
 | |
| 	docker volume ls -q -f "name=^$(DC_PROJECT)_" | $(XARGS) docker volume rm
 | |
| 	rm -rf cache
 | |
| 
 | |
| .PHONY: start-db-nowait
 | |
| start-db-nowait: init-dirs
 | |
| 	@echo "Starting postgres docker compose target using $${POSTGIS_IMAGE:-default} image (no recreate if exists)" && \
 | |
| 	$(DOCKER_COMPOSE) up --no-recreate -d postgres
 | |
| 
 | |
| .PHONY: start-db
 | |
| start-db: start-db-nowait
 | |
| 	@echo "Wait for PostgreSQL to start..."
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools pgwait
 | |
| 
 | |
| # Wrap start-db target but use the preloaded image
 | |
| .PHONY: start-db-preloaded
 | |
| start-db-preloaded: export POSTGIS_IMAGE=openmaptiles/postgis-preloaded
 | |
| start-db-preloaded: export COMPOSE_HTTP_TIMEOUT=180
 | |
| start-db-preloaded: start-db
 | |
| 
 | |
| .PHONY: stop-db
 | |
| stop-db:
 | |
| 	@echo "Stopping PostgreSQL..."
 | |
| 	$(DOCKER_COMPOSE) stop postgres
 | |
| 
 | |
| .PHONY: list-geofabrik
 | |
| list-geofabrik: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools download-osm list geofabrik
 | |
| 
 | |
| OSM_SERVERS:=geofabrik osmfr bbbike
 | |
| ALL_DOWNLOADS:=$(addprefix download-,$(OSM_SERVERS))
 | |
| OSM_SERVER=$(patsubst download-%,%,$@)
 | |
| .PHONY: $(ALL_DOWNLOADS)
 | |
| $(ALL_DOWNLOADS): init-dirs
 | |
| ifeq ($(strip $(area)),)
 | |
| 	@echo ""
 | |
| 	@echo "ERROR: Unable to download an area if area is not given."
 | |
| 	@echo "Usage:"
 | |
| 	@echo "  make download-$(OSM_SERVER) area=<area-id>"
 | |
| 	@echo ""
 | |
| 	$(if $(filter %-geofabrik,$@),@echo "Use   make list-geofabrik   to get a list of all available areas";echo "")
 | |
| 	@exit 1
 | |
| else
 | |
| 	@echo "=============== download-$(OSM_SERVER) ======================="
 | |
| 	@echo "Download area: $(area)"
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools bash -c \
 | |
| 		'download-osm $(OSM_SERVER) $(area) \
 | |
| 			--minzoom $$QUICKSTART_MIN_ZOOM \
 | |
| 			--maxzoom $$QUICKSTART_MAX_ZOOM \
 | |
| 			--make-dc /import/docker-compose-config.yml -- -d /import'
 | |
| 	ls -la ./data/$(notdir $(area))*
 | |
| 	@echo ""
 | |
| endif
 | |
| 
 | |
| .PHONY: psql
 | |
| psql: start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && psql.sh'
 | |
| 
 | |
| .PHONY: import-osm
 | |
| import-osm: all start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && import-osm $(PBF_FILE)'
 | |
| 
 | |
| .PHONY: update-osm
 | |
| update-osm: all start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && import-update'
 | |
| 
 | |
| .PHONY: import-diff
 | |
| import-diff: all start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && import-diff'
 | |
| 
 | |
| .PHONY: import-data
 | |
| import-data: start-db
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) import-data
 | |
| 
 | |
| .PHONY: import-borders
 | |
| import-borders: start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && import-borders $(PBF_FILE)'
 | |
| 
 | |
| .PHONY: import-sql
 | |
| import-sql: all start-db-nowait
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c 'pgwait && import-sql' | \
 | |
| 	  awk -v s=": WARNING:" '$$0~s{print; print "\n*** WARNING detected, aborting"; exit(1)} 1'
 | |
| 
 | |
| .PHONY: generate-tiles
 | |
| ifneq ($(wildcard data/docker-compose-config.yml),)
 | |
|   DC_CONFIG_TILES:=-f docker-compose.yml -f ./data/docker-compose-config.yml
 | |
| endif
 | |
| generate-tiles: all start-db
 | |
| 	rm -rf data/tiles.mbtiles
 | |
| 	echo "Generating tiles ..."; \
 | |
| 	$(DOCKER_COMPOSE) $(DC_CONFIG_TILES) run $(DC_OPTS) generate-vectortiles
 | |
| 	@echo "Updating generated tile metadata ..."
 | |
| 	$(DOCKER_COMPOSE) $(DC_CONFIG_TILES) run $(DC_OPTS) openmaptiles-tools \
 | |
| 			mbtiles-tools meta-generate ./data/tiles.mbtiles ./openmaptiles.yaml --auto-minmax --show-ranges
 | |
| 
 | |
| .PHONY: start-tileserver
 | |
| start-tileserver: init-dirs
 | |
| 	@echo " "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo "* "
 | |
| 	@echo "* Download/refresh maptiler/tileserver-gl docker image"
 | |
| 	@echo "* see documentation: https://github.com/maptiler/tileserver-gl"
 | |
| 	@echo "* "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo " "
 | |
| 	docker pull maptiler/tileserver-gl
 | |
| 	@echo " "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo "* "
 | |
| 	@echo "* Start maptiler/tileserver-gl "
 | |
| 	@echo "*       ----------------------------> check $(OMT_HOST):$(TPORT) "
 | |
| 	@echo "* "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo " "
 | |
| 	docker run $(DC_OPTS) -it --name tileserver-gl -v $$(pwd)/data:/data -p $(TPORT):$(TPORT) maptiler/tileserver-gl --port $(TPORT)
 | |
| 
 | |
| .PHONY: start-postserve
 | |
| start-postserve: start-db
 | |
| 	@echo " "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo "* "
 | |
| 	@echo "* Bring up postserve at $(OMT_HOST):$(PPORT)"
 | |
| 	@echo "*     --> can view it locally (use make start-maputnik)"
 | |
| 	@echo "*     --> or can use https://maputnik.github.io/editor"
 | |
| 	@echo "* "
 | |
| 	@echo "*  set data source / TileJSON URL to $(OMT_HOST):$(PPORT)"
 | |
| 	@echo "* "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo " "
 | |
| 	$(DOCKER_COMPOSE) up -d postserve
 | |
| 
 | |
| .PHONY: stop-postserve
 | |
| stop-postserve:
 | |
| 	$(DOCKER_COMPOSE) stop postserve
 | |
| 
 | |
| .PHONY: start-maputnik
 | |
| start-maputnik: stop-maputnik start-postserve
 | |
| 	@echo " "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo "* "
 | |
| 	@echo "* Start maputnik/editor "
 | |
| 	@echo "*       ---> go to $(OMT_HOST):8088 "
 | |
| 	@echo "*       ---> set data source / TileJSON URL to $(OMT_HOST):$(PPORT)"
 | |
| 	@echo "* "
 | |
| 	@echo "***********************************************************"
 | |
| 	@echo " "
 | |
| 	docker run $(DC_OPTS) --name maputnik_editor -d -p 8088:8888 maputnik/editor
 | |
| 
 | |
| .PHONY: stop-maputnik
 | |
| stop-maputnik:
 | |
| 	-docker rm -f maputnik_editor
 | |
| 
 | |
| .PHONY: generate-qareports
 | |
| generate-qareports: start-db
 | |
| 	./qa/run.sh
 | |
| 
 | |
| # generate all etl and mapping graphs
 | |
| .PHONY: generate-devdoc
 | |
| generate-devdoc: init-dirs
 | |
| 	mkdir -p ./build/devdoc && \
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools sh -c \
 | |
| 			'generate-etlgraph openmaptiles.yaml $(GRAPH_PARAMS) && \
 | |
| 			 generate-mapping-graph openmaptiles.yaml $(GRAPH_PARAMS)'
 | |
| 
 | |
| .PHONY: bash
 | |
| bash: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools bash
 | |
| 
 | |
| .PHONY: import-wikidata
 | |
| import-wikidata: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools import-wikidata --cache /cache/wikidata-cache.json openmaptiles.yaml
 | |
| 
 | |
| .PHONY: reset-db-stats
 | |
| reset-db-stats: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -P pager=off -c 'SELECT pg_stat_statements_reset();'
 | |
| 
 | |
| .PHONY: list-views
 | |
| list-views: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -A -F"," -P pager=off -P footer=off \
 | |
| 		-c "select schemaname, viewname from pg_views where schemaname='public' order by viewname;"
 | |
| 
 | |
| .PHONY: list-tables
 | |
| list-tables: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -A -F"," -P pager=off -P footer=off \
 | |
| 		-c "select schemaname, tablename from pg_tables where schemaname='public' order by tablename;"
 | |
| 
 | |
| .PHONY: psql-list-tables
 | |
| psql-list-tables: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -P pager=off -c "\d+"
 | |
| 
 | |
| .PHONY: vacuum-db
 | |
| vacuum-db: init-dirs
 | |
| 	@echo "Start - postgresql: VACUUM ANALYZE VERBOSE;"
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -P pager=off -c 'VACUUM ANALYZE VERBOSE;'
 | |
| 
 | |
| .PHONY: analyze-db
 | |
| analyze-db: init-dirs
 | |
| 	@echo "Start - postgresql: ANALYZE VERBOSE;"
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools psql.sh -v ON_ERROR_STOP=1 -P pager=off -c 'ANALYZE VERBOSE;'
 | |
| 
 | |
| .PHONY: list-docker-images
 | |
| list-docker-images:
 | |
| 	docker images | grep openmaptiles
 | |
| 
 | |
| .PHONY: refresh-docker-images
 | |
| refresh-docker-images: init-dirs
 | |
| ifneq ($(strip $(NO_REFRESH)),)
 | |
| 	@echo "Skipping docker image refresh"
 | |
| else
 | |
| 	@echo ""
 | |
| 	@echo "Refreshing docker images... Use NO_REFRESH=1 to skip."
 | |
| ifneq ($(strip $(USE_PRELOADED_IMAGE)),)
 | |
| 	POSTGIS_IMAGE=openmaptiles/postgis-preloaded \
 | |
| 		docker-compose pull --ignore-pull-failures $(QUIET_FLAG) openmaptiles-tools generate-vectortiles postgres
 | |
| else
 | |
| 	docker-compose pull --ignore-pull-failures $(QUIET_FLAG) openmaptiles-tools generate-vectortiles postgres import-data
 | |
| endif
 | |
| endif
 | |
| 
 | |
| .PHONY: remove-docker-images
 | |
| remove-docker-images:
 | |
| 	@echo "Deleting all openmaptiles related docker image(s)..."
 | |
| 	@$(DOCKER_COMPOSE) down
 | |
| 	@docker images "openmaptiles/*" -q                | $(XARGS) docker rmi -f
 | |
| 	@docker images "maputnik/editor" -q               | $(XARGS) docker rmi -f
 | |
| 	@docker images "maptiler/tileserver-gl" -q        | $(XARGS) docker rmi -f
 | |
| 
 | |
| .PHONY: clean-unnecessary-docker
 | |
| clean-unnecessary-docker:
 | |
| 	@echo "Deleting unnecessary container(s)..."
 | |
| 	@docker ps -a --filter "status=exited" | $(XARGS) docker rm
 | |
| 	@echo "Deleting unnecessary image(s)..."
 | |
| 	@docker images | grep \<none\> | awk -F" " '{print $$3}' | $(XARGS) docker rmi
 | |
| 
 | |
| .PHONY: test-perf-null
 | |
| test-perf-null: init-dirs
 | |
| 	$(DOCKER_COMPOSE) run $(DC_OPTS) openmaptiles-tools test-perf openmaptiles.yaml --test null --no-color
 | |
| 
 | |
| .PHONY: build-test-pbf
 | |
| build-test-pbf: init-dirs
 | |
| 	docker-compose run $(DC_OPTS) openmaptiles-tools /tileset/.github/workflows/build-test-data.sh
 |