diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 068b876..8d9a295 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,4 +13,4 @@ Your pull request must: * Be possible to merge automatically. -When you rea making PR that adds new spatial features to OpenMapTiles schema, please make also PR for at least one of our GL styles to show it on the map. Visual check is crucial. \ No newline at end of file +When you are making a PR that adds new spatial features to OpenMapTiles schema, please make also PR for at least one of our GL styles to show it on the map. Visual check is crucial. diff --git a/.gitignore b/.gitignore index 23fd4d1..9696f56 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,8 @@ data/* wikidata/* # generated source files -build/* \ No newline at end of file +build/* + +# any IDE files +.idea/ +.vscode/ diff --git a/.travis.yml b/.travis.yml index 8e93d6b..8d1483c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ language: bash services: - docker - + before_install: - sudo rm -f /usr/local/bin/docker-compose - curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > docker-compose @@ -15,9 +15,8 @@ before_install: - sudo service docker restart - docker-compose -v - docker -v - + script: - sudo service docker restart - docker-compose config - sudo ./quickstart.sh - diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9e61492 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,47 @@ +# Introduction + +Thank you for considering contributing to OpenMapTiles. It's people like you that make OpenMapTiles such a great project. Talk to us at the OSM Slack **#openmaptiles** channel ([join](https://osmus-slack.herokuapp.com/)). + +Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. + +OpenMapTiles is an open source project and we love to receive contributions from our community — you! There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into OpenMapTiles itself. + +# Ground Rules + + * Create issues for any major changes and enhancements that you wish to make. Discuss things transparently and get community feedback. + * Keep feature versions as small as possible, preferably one new feature per version. + * Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See the [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/). + +# Getting started + +1. Create your own fork of the code +1. Do the changes in your fork +1. Create a pull request + +# Code review process + +We all make mistakes and bad coding decisions. So apart from the obvious fixes, all changes must be reviewed by another 2 members of the project. This also helps with the [bus factor](https://en.wikipedia.org/wiki/Bus_factor) -- there should always be other people in the team who know why a change was made. + +For any non-trivial changes, all pull requests must be approved by at least three members of the OpenMapTiles team. Afterwards you can merge the PR if you have rights, or another person must do it for you. + +Your pull request must: + + * Address a single issue or add a single item of functionality. + * Contain a clean history of small, incremental, logically separate commits, + with no merge commits. + * Use clear commit messages. + * Be possible to merge automatically. + +When you modify rules of importing data in `mapping.yaml` or `*.sql`, please update also: + +1. field description in `[layer].yaml` +2. comments starting with `#etldoc` +3. if needed, generate new `mapping_diagram.png` or `etl_diagram.png` using commands below: +``` +make mapping-graph-[layer] +make etl-graph-[layer] +``` +4. update layer description on https://openmaptiles.org/schema/ (https://github.com/openmaptiles/www.openmaptiles.org/tree/master/layers) +5. check if OMT styles are affected by the PR and if there is a need for style updates + +When you are making PR that adds new spatial features to OpenMapTiles schema, please make also PR for at least one of our GL styles to show it on the map. Visual check is crucial. diff --git a/Makefile b/Makefile index 0c50991..6e674b5 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,9 @@ help: @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 [./build/devdoc]" + @echo " make generate-devdoc # generate devdoc including graphs for all layers [./build/devdoc]" + @echo " make etl-graph # hint for generating a single etl graph" + @echo " make mapping-graph # hint for generating a single mapping graph" @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" @@ -31,18 +33,22 @@ help: @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 " cat quickstart.log # backup of the last ./quickstart.sh" @echo " make help # help about available commands" @echo "==============================================================================" -build/openmaptiles.tm2source/data.yml: - mkdir -p build/openmaptiles.tm2source && generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > build/openmaptiles.tm2source/data.yml +build: + mkdir -p build -build/mapping.yaml: - mkdir -p build && generate-imposm3 openmaptiles.yaml > build/mapping.yaml +build/openmaptiles.tm2source/data.yml: build + mkdir -p build/openmaptiles.tm2source + docker-compose run --rm openmaptiles-tools generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > build/openmaptiles.tm2source/data.yml -build/tileset.sql: - mkdir -p build && generate-sql openmaptiles.yaml > build/tileset.sql +build/mapping.yaml: build + docker-compose run --rm openmaptiles-tools generate-imposm3 openmaptiles.yaml > build/mapping.yaml + +build/tileset.sql: build + docker-compose run --rm openmaptiles-tools generate-sql openmaptiles.yaml > build/tileset.sql clean: rm -f build/openmaptiles.tm2source/data.yml && rm -f build/mapping.yaml && rm -f build/tileset.sql @@ -70,30 +76,18 @@ download-geofabrik: psql: db-start docker-compose run --rm import-osm /usr/src/app/psql.sh -cfg-remake: - docker-compose run --rm openmaptiles-tools make clean - docker-compose run --rm openmaptiles-tools make - -import-osm: db-start - docker-compose run --rm openmaptiles-tools make clean - docker-compose run --rm openmaptiles-tools make +import-osm: db-start all docker-compose run --rm import-osm -import-sql: db-start - docker-compose run --rm openmaptiles-tools make clean - docker-compose run --rm openmaptiles-tools make +import-sql: db-start all docker-compose run --rm import-sql -import-osmsql: db-start - docker-compose run --rm openmaptiles-tools make clean - docker-compose run --rm openmaptiles-tools make +import-osmsql: db-start all docker-compose run --rm import-osm docker-compose run --rm import-sql -generate-tiles: db-start +generate-tiles: db-start all rm -rf data/tiles.mbtiles - docker-compose run --rm openmaptiles-tools make clean - docker-compose run --rm openmaptiles-tools make if [ -f ./data/docker-compose-config.yml ]; then \ docker-compose -f docker-compose.yml -f ./data/docker-compose-config.yml run --rm generate-vectortiles; \ else \ @@ -147,23 +141,35 @@ start-postserve: generate-qareports: ./qa/run.sh -# work in progress - please don't remove -generate-devdoc: +build/devdoc: mkdir -p ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/aeroway/aeroway.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/boundary/boundary.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/building/building.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/housenumber/housenumber.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/landcover/landcover.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/landuse/landuse.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/park/park.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/place/place.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/poi/poi.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/transportation/transportation.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/transportation_name/transportation_name.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/water/water.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/water_name/water_name.yaml ./build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/waterway/waterway.yaml ./build/devdoc + +layers = $(notdir $(wildcard layers/*)) # all layers + +etl-graph: + @echo 'Use' + @echo ' make etl-graph-[layer] to generate etl graph for [layer]' + @echo ' example: make etl-graph-poi' + @echo 'Valid layers: $(layers)' + +# generate etl graph for a certain layer, e.g. etl-graph-building, etl-graph-place +etl-graph-%: layers/% build/devdoc + docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/$*/$*.yaml ./build/devdoc + +mappingLayers = $(notdir $(patsubst %/mapping.yaml,%, $(wildcard layers/*/mapping.yaml))) # layers with mapping.yaml + +# generate mapping graph for a certain layer, e.g. mapping-graph-building, mapping-graph-place +mapping-graph: + @echo 'Use' + @echo ' make mapping-graph-[layer] to generate mapping graph for [layer]' + @echo ' example: make mapping-graph-poi' + @echo 'Valid layers: $(mappingLayers)' + +mapping-graph-%: ./layers/%/mapping.yaml build/devdoc + docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-mapping-graph layers/$*/$*.yaml ./build/devdoc/mapping-diagram-$* + +# generate all etl and mapping graphs +generate-devdoc: $(addprefix etl-graph-,$(layers)) $(addprefix mapping-graph-,$(mappingLayers)) import-sql-dev: docker-compose run --rm import-sql /bin/bash diff --git a/QUICKSTART.md b/QUICKSTART.md index dfd52b7..90fed7e 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -1,5 +1,3 @@ - - ## Quickstart - for small extracts ### Req: @@ -12,7 +10,9 @@ * Please give a feedback, share your experience, write a tutorial * bash * git -* make +* make +* bc +* md5sum * docker >=1.12.3 * https://www.docker.com/products/overview * docker-compose >=1.7.1 @@ -45,15 +45,15 @@ cd openmaptiles If you have problems with the quickstart * check the ./quickstart.log! * doublecheck the system requirements! -* check the current issues: https://github.com/openmaptiles/openmaptiles/issues -* create new issues: +* check the current issues: https://github.com/openmaptiles/openmaptiles/issues +* create new issues: * create a new gist: https://gist.github.com/ from your ./quickstart.log - * doublecheck: don't reveal any sensitive information about your system + * doublecheck: don't reveal any sensitive information about your system * create a new issue: https://github.com/openmaptiles/openmaptiles/issues - * describe the problems - * add any pertinent information about your environment + * describe the problems + * add any pertinent information about your environment * link your (quickstart.log) gist! - + ### Check other extracts IF the previous step is working, @@ -377,25 +377,25 @@ and the generated maps are going to be available in browser on [localhost:8090/t ### Check tileserver -start: -* ` make start-tileserver` +start: +* ` make start-tileserver` and the generated maps are going to be available in webbrowser on [localhost:8080](http://localhost:8080/). -This is only a quick preview, because your mbtiles only generated to zoom level 7 ! +This is only a quick preview, because your mbtiles only generated to zoom level 7 ! ### Change MIN_ZOOM and MAX_ZOOM modify the settings in the `.env` file, the defaults : * QUICKSTART_MIN_ZOOM=0 -* QUICKSTART_MAX_ZOOM=7 +* QUICKSTART_MAX_ZOOM=7 and re-start `./quickstart.sh ` * the new config file re-generating to here ./data/docker-compose-config.yml * Known problems: - * If you use same area - then the ./data/docker-compose-config.yml not re-generating, so you have to modify by hand! + * If you use same area - then the ./data/docker-compose-config.yml not re-generating, so you have to modify by hand! -Hints: +Hints: * Small increments! Never starts with the MAX_ZOOM = 14 * The suggested MAX_ZOOM = 14 - use only with small extracts @@ -408,37 +408,36 @@ the current output: ``` ============================================================================== - OpenMapTiles https://github.com/openmaptiles/openmaptiles -Hints for testing areas - make download-geofabrik-list # list actual geofabrik OSM extracts for download -> <> - make list # list actual geofabrik OSM extracts for download -> <> - ./quickstart.sh <> # example: ./quickstart.sh madagascar - + OpenMapTiles https://github.com/openmaptiles/openmaptiles +Hints for testing areas + make download-geofabrik-list # list actual geofabrik OSM extracts for download -> <> + make list # list actual geofabrik OSM extracts for download -> <> + ./quickstart.sh <> # example: ./quickstart.sh madagascar + Hints for designers: - make start-postserve # start Postserver + Maputnik Editor [ see localhost:8088 ] - make start-tileserver # start klokantech/tileserver-gl [ see localhost:8080 ] - + make start-postserve # start Postserver + Maputnik Editor [ see localhost:8088 ] + make start-tileserver # start klokantech/tileserver-gl [ see localhost:8080 ] + Hints for developers: - make # build source code + make # build source code make download-geofabrik area=albania # download OSM data from geofabrik, and create config file - make psql # start PostgreSQL console - make psql-list-tables # list all PostgreSQL tables + make psql # start PostgreSQL console + make psql-list-tables # list all PostgreSQL tables make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE make psql-analyze # PostgreSQL: ANALYZE make generate-qareports # generate reports [./build/qareports] make generate-devdoc # generate devdoc [./build/devdoc] - make import-sql-dev # start import-sql /bin/bash terminal + make import-sql-dev # start import-sql /bin/bash terminal make import-osm-dev # start import-osm /bin/bash terminal (imposm3) - make clean-docker # remove docker containers, PG data volume - make forced-clean-sql # drop all PostgreSQL tables for clean environment + make clean-docker # remove docker containers, PG data volume + make forced-clean-sql # drop all PostgreSQL tables for clean environment make docker-unnecessary-clean # clean unnecessary docker image(s) and container(s) make refresh-docker-images # refresh openmaptiles docker images from Docker HUB make remove-docker-images # remove openmaptiles docker images make pgclimb-list-views # list PostgreSQL public schema views make pgclimb-list-tables # list PostgreSQL public schema tables cat .env # list PG database and MIN_ZOOM and MAX_ZOOM information - cat ./quickstart.log # backup of the last ./quickstart.sh + cat ./quickstart.log # backup of the last ./quickstart.sh make help # help about available commands ============================================================================== ``` - diff --git a/README.md b/README.md index 6b8ebb4..208f4af 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ ## OpenMapTiles [![Build Status](https://travis-ci.org/openmaptiles/openmaptiles.svg?branch=master)](https://travis-ci.org/openmaptiles/openmaptiles) -OpenMapTiles is an extensible and open vector tile schema for a OpenStreetMap basemap. It is used to generate vector tiles for [openmaptiles.org](http://openmaptiles.org/) and [openmaptiles.com](http://openmaptiles.com/). +OpenMapTiles is an extensible and open tile schema based on the OpenStreetMap. It is used to generate vector tiles for online zoomable maps. The project is about creating a beautiful basemaps with general layers that contain topographic information. More information [openmaptiles.org](https://openmaptiles.org/) and [openmaptiles.com](https://openmaptiles.com/). -We encourage you to collaborate, reuse and adapt existing layers and add your own layers or use our approach for your own vector tile project. The repository is built on top of the [openmaptiles/tools](https://github.com/openmaptiles/openmaptiles-tools) to simplify vector tile creation. +We encourage you to collaborate, reuse and adapt existing layers and add your own layers or use our approach for your own vector tile project. Feel free to fork the repo and experiment. The repository is built on top of the [openmaptiles/openmaptiles-tools](https://github.com/openmaptiles/openmaptiles-tools) to simplify vector tile creation. -- :link: Docs http://openmaptiles.org/docs -- :link: Schema: http://openmaptiles.org/schema -- :link: Production package: http://openmaptiles.com/ +Please keep in mind that OpenMapTiles schema should stay displaying general topographic content. In case of creating a new layer or expanding an existing one with a specific theme, please create a fork and invite other community members to cooperate on your topic in this separate fork. OpenMapTiles schema is used in many projects all over the world and the size of the final vector tiles needs to be considered in any update. + +- :link: Schema https://openmaptiles.org/schema +- :link: Docs https://openmaptiles.org/docs +- :link: Production package: https://openmaptiles.com/production-package/ +- :link: Hosting https://www.maptiler.com/cloud/ +- :link: Create own layer https://github.com/openmaptiles/openmaptiles-skiing +- :link: Discuss at the #openmaptiles channel at [OSM Slack](https://osmus-slack.herokuapp.com/) ## Styles @@ -60,11 +65,10 @@ Together the layers make up the OpenMapTiles tileset. ## Develop -To work on OpenMapTiles you need Docker and Python. +To work on OpenMapTiles you need Docker. - Install [Docker](https://docs.docker.com/engine/installation/). Minimum version is 1.12.3+. - Install [Docker Compose](https://docs.docker.com/compose/install/). Minimum version is 1.7.1+. -- Install [OpenMapTiles tools](https://github.com/openmaptiles/openmaptiles-tools) with `pip install openmaptiles-tools` ### Build @@ -75,8 +79,6 @@ git clone git@github.com:openmaptiles/openmaptiles.git cd openmaptiles # Build the imposm mapping, the tm2source project and collect all SQL scripts make -# You can also run the build process inside a Docker container -docker run -v $(pwd):/tileset openmaptiles/openmaptiles-tools make ``` You can execute the following manual steps (for better understanding) @@ -94,7 +96,7 @@ Now start up the database container. docker-compose up -d postgres ``` -Import external data from [OpenStreetMapData](http://openstreetmapdata.com/), [Natural Earth](http://www.naturalearthdata.com/) and [OpenStreetMap Lake Labels](https://github.com/lukasmartinelli/osm-lakelines). +Import external data from [OpenStreetMapData](http://osmdata.openstreetmap.de/), [Natural Earth](http://www.naturalearthdata.com/) and [OpenStreetMap Lake Labels](https://github.com/lukasmartinelli/osm-lakelines). ```bash docker-compose run import-water @@ -119,10 +121,10 @@ docker-compose run import-osm ### Work on Layers -Each time you modify layer SQL code run `make` and `docker-compose run import-sql`. +Each time you modify layer SQL code run `make` and `make import-sql`. ``` -make clean && make && docker-compose run import-sql +make clean && make && make import-sql ``` Now you are ready to **generate the vector tiles**. Using environment variables @@ -136,12 +138,12 @@ docker-compose run generate-vectortiles All code in this repository is under the [BSD license](./LICENSE.md) and the cartography decisions encoded in the schema and SQL are licensed under [CC-BY](./LICENSE.md). -Products or services using maps derived from OpenMapTiles schema need to visibly credit "OpenMapTiles.org" or reference "OpenMapTiles" with a link to http://openmaptiles.org/. Exceptions to attribution requirement can be granted on request. +Products or services using maps derived from OpenMapTiles schema need to visibly credit "OpenMapTiles.org" or reference "OpenMapTiles" with a link to https://openmaptiles.org/. Exceptions to attribution requirement can be granted on request. For a browsable electronic map based on OpenMapTiles and OpenStreetMap data, the credit should appear in the corner of the map. For example: -[© OpenMapTiles](http://openmaptiles.org/) [© OpenStreetMap contributors](http://www.openstreetmap.org/copyright) +[© OpenMapTiles](https://openmaptiles.org/) [© OpenStreetMap contributors](https://www.openstreetmap.org/copyright) For printed and static maps a similar attribution should be made in a textual description near the image, in the same fashion as if you cite a photograph. diff --git a/docker-compose.yml b/docker-compose.yml index fcaf976..478d5c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,7 @@ services: networks: - postgres_conn import-water: - image: "openmaptiles/import-water:0.6" + image: "openmaptiles/import-water:1.1" env_file: .env networks: - postgres_conn @@ -83,7 +83,7 @@ services: volumes: - ./wikidata:/import openmaptiles-tools: - image: "openmaptiles/openmaptiles-tools:0.9.1" + image: "openmaptiles/openmaptiles-tools:0.9.2" env_file: .env networks: - postgres_conn diff --git a/layers/boundary/boundary.sql b/layers/boundary/boundary.sql index 55047ec..f3c1f62 100644 --- a/layers/boundary/boundary.sql +++ b/layers/boundary/boundary.sql @@ -16,7 +16,6 @@ CREATE OR REPLACE VIEW boundary_z1 AS ( UNION ALL SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime FROM ne_50m_admin_1_states_provinces_lines - WHERE scalerank <= 2 ); @@ -43,29 +42,19 @@ CREATE OR REPLACE VIEW boundary_z4 AS ( UNION ALL SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime FROM ne_10m_admin_1_states_provinces_lines - WHERE scalerank <= 3 AND min_zoom <= 7 + WHERE min_zoom <= 5 UNION ALL SELECT geometry, admin_level, disputed, maritime FROM osm_border_linestring_gen10 WHERE maritime=true AND admin_level <= 2 ); --- etldoc: ne_10m_admin_0_boundary_lines_land -> boundary_z5 --- etldoc: ne_10m_admin_1_states_provinces_lines -> boundary_z5 -- etldoc: osm_border_linestring_gen9 -> boundary_z5 CREATE OR REPLACE VIEW boundary_z5 AS ( - SELECT geometry, 2 AS admin_level, false AS disputed, false AS maritime - FROM ne_10m_admin_0_boundary_lines_land - WHERE featurecla <> 'Lease limit' - UNION ALL - SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime - FROM ne_10m_admin_1_states_provinces_lines - WHERE scalerank <= 7 AND min_zoom <= 8 - UNION ALL SELECT geometry, admin_level, disputed, maritime FROM osm_border_linestring_gen9 - WHERE maritime=true AND admin_level <= 2 + WHERE admin_level <= 4 ); -- etldoc: osm_border_linestring_gen8 -> boundary_z6 diff --git a/layers/boundary/boundary.yaml b/layers/boundary/boundary.yaml index 90555d7..ec57da0 100644 --- a/layers/boundary/boundary.yaml +++ b/layers/boundary/boundary.yaml @@ -1,10 +1,11 @@ layer: id: "boundary" description: | - Contains administrative boundaries (no maritime boundaries yet) as linestrings. - Until z7 [Natural Earth data](http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/) - is used after which OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative)) are present from z8 to z14. - OSM data contains all [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level) + Contains administrative boundaries as linestrings. + Until z4 [Natural Earth data](http://www.naturalearthdata.com/downloads/) is used after which + OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative)) + are present from z5 to z14 (also for maritime boundaries with admin_level <= 2 at z4). + OSM data contains several [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level) but for most styles it makes sense to just style `admin_level=2` and `admin_level=4`. fields: admin_level: | diff --git a/layers/boundary/etl_diagram.png b/layers/boundary/etl_diagram.png index 8f77d16..12e4cea 100644 Binary files a/layers/boundary/etl_diagram.png and b/layers/boundary/etl_diagram.png differ diff --git a/layers/building/building.sql b/layers/building/building.sql index 372142d..9b9706a 100644 --- a/layers/building/building.sql +++ b/layers/building/building.sql @@ -26,6 +26,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height, COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels, COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level, + nullif(material, '') AS material, + nullif(colour, '') AS colour, FALSE as hide_3d FROM osm_building_relation WHERE building = '' @@ -38,6 +40,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height, COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels, COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level, + nullif(material, '') AS material, + nullif(colour, '') AS colour, FALSE as hide_3d FROM osm_building_associatedstreet WHERE role = 'house' @@ -49,6 +53,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height, COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels, COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level, + nullif(material, '') AS material, + nullif(colour, '') AS colour, FALSE as hide_3d FROM osm_building_street WHERE role = 'house' @@ -61,6 +67,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height, COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels, COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level, + nullif(material, '') AS material, + nullif(colour, '') AS colour, FALSE as hide_3d FROM osm_building_polygon obp WHERE EXISTS (SELECT 1 FROM osm_building_multipolygon obm WHERE obp.osm_id = obm.osm_id) @@ -72,6 +80,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( COALESCE(nullif(as_numeric(obp.min_height),-1),nullif(as_numeric(obp.buildingmin_height),-1)) as min_height, COALESCE(nullif(as_numeric(obp.levels),-1),nullif(as_numeric(obp.buildinglevels),-1)) as levels, COALESCE(nullif(as_numeric(obp.min_level),-1),nullif(as_numeric(obp.buildingmin_level),-1)) as min_level, + nullif(obp.material, '') AS material, + nullif(obp.colour, '') AS colour, CASE WHEN obr.role='outline' THEN TRUE ELSE FALSE END as hide_3d FROM osm_building_polygon obp @@ -80,14 +90,35 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( ); CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int) -RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_height int, hide_3d boolean) AS $$ +RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_height int, colour text, hide_3d boolean) AS $$ SELECT geometry, osm_id, render_height, render_min_height, + COALESCE(colour, CASE material + -- Ordered by count from taginfo + WHEN 'cement_block' THEN '#6a7880' + WHEN 'brick' THEN '#bd8161' + WHEN 'plaster' THEN '#dadbdb' + WHEN 'wood' THEN '#d48741' + WHEN 'concrete' THEN '#d3c2b0' + WHEN 'metal' THEN '#b7b1a6' + WHEN 'stone' THEN '#b4a995' + WHEN 'mud' THEN '#9d8b75' + WHEN 'steel' THEN '#b7b1a6' -- same as metal + WHEN 'glass' THEN '#5a81a0' + WHEN 'traditional' THEN '#bd8161' -- same as brick + WHEN 'masonry' THEN '#bd8161' -- same as brick + WHEN 'Brick' THEN '#bd8161' -- same as brick + WHEN 'tin' THEN '#b7b1a6' -- same as metal + WHEN 'timber_framing' THEN '#b3b0a9' + WHEN 'sandstone' THEN '#b4a995' -- same as stone + WHEN 'clay' THEN '#9d8b75' -- same as mud + END) AS colour, CASE WHEN hide_3d THEN TRUE ELSE NULL::boolean END AS hide_3d FROM ( -- etldoc: osm_building_polygon_gen1 -> layer_building:z13 SELECT osm_id, geometry, NULL::int AS render_height, NULL::int AS render_min_height, + NULL::text AS material, NULL::text AS colour, FALSE AS hide_3d FROM osm_building_polygon_gen1 WHERE zoom_level = 13 AND geometry && bbox @@ -97,6 +128,8 @@ RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_he osm_id, geometry, ceil( COALESCE(height, levels*3.66,5))::int AS render_height, floor(COALESCE(min_height, min_level*3.66,0))::int AS render_min_height, + material, + colour, hide_3d FROM osm_all_buildings WHERE diff --git a/layers/building/building.yaml b/layers/building/building.yaml index 5165200..4586391 100644 --- a/layers/building/building.yaml +++ b/layers/building/building.yaml @@ -5,12 +5,14 @@ layer: this is welcomed. buffer_size: 4 datasource: - query: (SELECT geometry, render_height, render_min_height, hide_3d FROM layer_building(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, render_height, render_min_height, colour, hide_3d FROM layer_building(!bbox!, z(!scale_denominator!))) AS t fields: render_height: | An approximated height from levels and height of the building or building:part after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear). For future 3D rendering of buildings. render_min_height: | An approximated height from levels and height of the bottom of the building or building:part after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear). For future 3D rendering of buildings. + colour: | + Colour hide_3d: | If True, building (part) should not be rendered in 3D. Currently, [building outlines](https://wiki.openstreetmap.org/wiki/Simple_3D_buildings) are marked as hide_3d. schema: diff --git a/layers/building/mapping.yaml b/layers/building/mapping.yaml index b12169d..dbd7408 100644 --- a/layers/building/mapping.yaml +++ b/layers/building/mapping.yaml @@ -17,6 +17,12 @@ tables: type: area - name: webmerc_area type: webmerc_area + - name: material + key: building:material + type: string + - name: colour + key: building:colour + type: string - name: building key: building type: string @@ -78,6 +84,12 @@ tables: key: building type: string from_member: true + - name: material + key: building:material + type: string + - name: colour + key: building:colour + type: string - name: buildingpart key: building:part type: string @@ -166,6 +178,12 @@ tables: key: building type: string from_member: true + - name: material + key: building:material + type: string + - name: colour + key: building:colour + type: string - name: buildingpart key: building:part type: string @@ -254,6 +272,12 @@ tables: key: building type: string from_member: true + - name: material + key: building:material + type: string + - name: colour + key: building:colour + type: string - name: buildingpart key: building:part type: string @@ -342,6 +366,12 @@ tables: key: building type: string from_member: true + - name: material + key: building:material + type: string + - name: colour + key: building:colour + type: string - name: buildingpart key: building:part type: string diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 2ea3e9d..a0722bd 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -25,7 +25,7 @@ CREATE OR REPLACE FUNCTION housenumber.flag() RETURNS trigger AS $$ BEGIN INSERT INTO housenumber.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; RETURN null; -END; +END; $$ language plpgsql; CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS diff --git a/layers/housenumber/layer.sql b/layers/housenumber/layer.sql index a40a290..eed865f 100644 --- a/layers/housenumber/layer.sql +++ b/layers/housenumber/layer.sql @@ -1,5 +1,5 @@ --- etldoc: layer_housenumber[shape=record fillcolor=lightpink, style="rounded,filled", +-- etldoc: layer_housenumber[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: label="layer_housenumber | z14+" ] ; CREATE OR REPLACE FUNCTION layer_housenumber(bbox geometry, zoom_level integer) diff --git a/layers/landcover/landcover.yaml b/layers/landcover/landcover.yaml index 6f2590a..4c29aea 100644 --- a/layers/landcover/landcover.yaml +++ b/layers/landcover/landcover.yaml @@ -26,33 +26,35 @@ layer: or [`wetland`](http://wiki.openstreetmap.org/wiki/Key:wetland) tag. values: - allotments + - bare_rock + - beach + - bog - farm - farmland - - orchard - - plant_nursery - - vineyard + - forest + - garden + - glacier - grass - grassland - - glacier - - meadow - - forest - - village_green - - recreation_ground - - park - - garden - - wetland - - grassland - - bog - - swamp - - wet_meadow + - mangrove - marsh + - meadow + - orchard + - park + - plant_nursery + - recreation_ground - reedbed - saltern - - tidalflat - saltmarsh - - mangrove - - beach - sand + - scree + - swamp + - tidalflat + - village_green + - vineyard + - wet_meadow + - wetland + - wood datasource: geometry_field: geometry query: (SELECT geometry, class, subclass FROM layer_landcover(!bbox!, z(!scale_denominator!))) AS t diff --git a/layers/landuse/landuse.sql b/layers/landuse/landuse.sql index c0e72d4..b8ebee1 100644 --- a/layers/landuse/landuse.sql +++ b/layers/landuse/landuse.sql @@ -1,55 +1,55 @@ -- etldoc: ne_50m_urban_areas -> landuse_z4 CREATE OR REPLACE VIEW landuse_z4 AS ( - SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank + SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank FROM ne_50m_urban_areas WHERE scalerank <= 2 ); -- etldoc: ne_50m_urban_areas -> landuse_z5 CREATE OR REPLACE VIEW landuse_z5 AS ( - SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank + SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank FROM ne_50m_urban_areas ); -- etldoc: ne_10m_urban_areas -> landuse_z6 CREATE OR REPLACE VIEW landuse_z6 AS ( - SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank + SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank FROM ne_10m_urban_areas ); -- etldoc: osm_landuse_polygon_gen5 -> landuse_z9 CREATE OR REPLACE VIEW landuse_z9 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon_gen5 ); -- etldoc: osm_landuse_polygon_gen4 -> landuse_z10 CREATE OR REPLACE VIEW landuse_z10 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon_gen4 ); -- etldoc: osm_landuse_polygon_gen3 -> landuse_z11 CREATE OR REPLACE VIEW landuse_z11 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon_gen3 ); -- etldoc: osm_landuse_polygon_gen2 -> landuse_z12 CREATE OR REPLACE VIEW landuse_z12 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon_gen2 ); -- etldoc: osm_landuse_polygon_gen1 -> landuse_z13 CREATE OR REPLACE VIEW landuse_z13 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure,tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon_gen1 ); -- etldoc: osm_landuse_polygon -> landuse_z14 CREATE OR REPLACE VIEW landuse_z14 AS ( - SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank + SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank FROM osm_landuse_polygon ); @@ -63,7 +63,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text) AS $$ NULLIF(landuse, ''), NULLIF(amenity, ''), NULLIF(leisure, ''), - NULLIF(tourism, '') + NULLIF(tourism, ''), + NULLIF(place, '') ) AS class FROM ( -- etldoc: landuse_z4 -> layer_landuse:z4 diff --git a/layers/landuse/landuse.yaml b/layers/landuse/landuse.yaml index 45ff892..d168e46 100644 --- a/layers/landuse/landuse.yaml +++ b/layers/landuse/landuse.yaml @@ -9,17 +9,12 @@ layer: description: | Use the **class** to assign special colors to areas. Original value of either the - [`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity), - [`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism), [`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse), - or [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure) tag. + [`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity), + [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure), + [`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism), + or [`place`](http://wiki.openstreetmap.org/wiki/Key:place) tag. values: - - school - - university - - kindergarten - - college - - library - - hospital - railway - cemetery - military @@ -27,12 +22,21 @@ layer: - commercial - industrial - retail + - bus_station + - school + - university + - kindergarten + - college + - library + - hospital - stadium - pitch - playground + - track - theme_park - - bus_station - zoo + - suburb + - neighbourhood datasource: geometry_field: geometry query: (SELECT geometry, class FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t diff --git a/layers/landuse/mapping.yaml b/layers/landuse/mapping.yaml index aa31dd3..ab9fd54 100644 --- a/layers/landuse/mapping.yaml +++ b/layers/landuse/mapping.yaml @@ -46,19 +46,14 @@ tables: - name: tourism key: tourism type: string + - name: place + key: place + type: string - name: area type: area - name: webmerc_area type: webmerc_area mapping: - amenity: - - bus_station - - school - - university - - kindergarten - - college - - library - - hospital landuse: - railway - cemetery @@ -68,10 +63,22 @@ tables: - commercial - industrial - retail + amenity: + - bus_station + - school + - university + - kindergarten + - college + - library + - hospital leisure: - stadium - pitch - playground + - track tourism: - theme_park - zoo + place: + - suburb + - neighbourhood diff --git a/layers/landuse/mapping_diagram.png b/layers/landuse/mapping_diagram.png index c4898b4..2ee445e 100644 Binary files a/layers/landuse/mapping_diagram.png and b/layers/landuse/mapping_diagram.png differ diff --git a/layers/mountain_peak/layer.sql b/layers/mountain_peak/layer.sql index 1fc292c..6c9643c 100644 --- a/layers/mountain_peak/layer.sql +++ b/layers/mountain_peak/layer.sql @@ -2,29 +2,52 @@ -- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink, -- etldoc: style="rounded,filled", label="layer_mountain_peak | z7+" ] ; -CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry, zoom_level integer, pixel_width numeric) -RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, ele int, ele_ft int, "rank" int) AS $$ +CREATE OR REPLACE FUNCTION layer_mountain_peak( + bbox geometry, + zoom_level integer, + pixel_width numeric) + RETURNS TABLE( + osm_id bigint, + geometry geometry, + name text, + name_en text, + name_de text, + class text, + tags hstore, + ele int, + ele_ft int, + "rank" int) AS +$$ -- etldoc: osm_peak_point -> layer_mountain_peak:z7_ - SELECT osm_id, geometry, name, name_en, name_de, tags, ele::int, ele_ft::int, rank::int - FROM ( - SELECT osm_id, geometry, name, - COALESCE(NULLIF(name_en, ''), name) AS name_en, - COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, - tags, - substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, - round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, - row_number() OVER ( - PARTITION BY LabelGrid(geometry, 100 * pixel_width) - ORDER BY ( - substring(ele from E'^(-?\\d+)(\\D|$)')::int + - (CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) + - (CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END) - ) DESC - )::int AS "rank" - FROM osm_peak_point - WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+' - ) AS ranked_peaks - WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14) - ORDER BY "rank" ASC; + SELECT + osm_id, + geometry, + name, + name_en, + name_de, + tags -> 'natural' AS class, + tags, + ele::int, + ele_ft::int, + rank::int FROM ( + SELECT osm_id, geometry, name, + COALESCE(NULLIF(name_en, ''), name) AS name_en, + COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, + tags, + substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, + round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, + row_number() OVER ( + PARTITION BY LabelGrid(geometry, 100 * pixel_width) + ORDER BY ( + substring(ele from E'^(-?\\d+)(\\D|$)')::int + + (CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) + + (CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END) + ) DESC + )::int AS "rank" + FROM osm_peak_point + WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+' + ) AS ranked_peaks + WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14) + ORDER BY "rank" ASC; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/mountain_peak/mapping.yaml b/layers/mountain_peak/mapping.yaml index 890fd58..7b9cc68 100644 --- a/layers/mountain_peak/mapping.yaml +++ b/layers/mountain_peak/mapping.yaml @@ -28,3 +28,4 @@ tables: mapping: natural: - peak + - volcano diff --git a/layers/mountain_peak/mapping_diagram.png b/layers/mountain_peak/mapping_diagram.png index 842b8f5..77e06db 100644 Binary files a/layers/mountain_peak/mapping_diagram.png and b/layers/mountain_peak/mapping_diagram.png differ diff --git a/layers/mountain_peak/mountain_peak.yaml b/layers/mountain_peak/mountain_peak.yaml index 8d82910..e32a843 100644 --- a/layers/mountain_peak/mountain_peak.yaml +++ b/layers/mountain_peak/mountain_peak.yaml @@ -8,13 +8,19 @@ layer: name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. name_en: English name `name:en` if available, otherwise `name`. name_de: German name `name:de` if available, otherwise `name` or `name:en`. + class: + description: | + Use the **class** to differentiate between mountain peak and volcano. + values: + - peak + - volcano ele: Elevation (`ele`) in meters. ele_ft: Elevation (`ele`) in feets. rank: Rank of the peak within one tile (starting at 1 that is the most important peak). datasource: geometry_field: geometry srid: 900913 - query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t + query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: - ./update_peak_point.sql - ./layer.sql diff --git a/layers/poi/class.sql b/layers/poi/class.sql index e87e0b0..949dd33 100644 --- a/layers/poi/class.sql +++ b/layers/poi/class.sql @@ -44,7 +44,7 @@ RETURNS TEXT AS $$ WHEN subclass IN ('supermarket','deli','delicatessen','department_store','greengrocer','marketplace') THEN 'grocery' WHEN subclass IN ('books','library') THEN 'library' WHEN subclass IN ('university','college') THEN 'college' - WHEN subclass IN ('hotel','motel','bed_and_breakfast','guest_house','hostel','chalet','alpine_hut','camp_site') THEN 'lodging' + 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 IN ('cafe') THEN 'cafe' diff --git a/layers/poi/etl_diagram.png b/layers/poi/etl_diagram.png index a88f860..314855c 100644 Binary files a/layers/poi/etl_diagram.png and b/layers/poi/etl_diagram.png differ diff --git a/layers/poi/mapping.yaml b/layers/poi/mapping.yaml index a57e796..3fb327b 100644 --- a/layers/poi/mapping.yaml +++ b/layers/poi/mapping.yaml @@ -12,6 +12,7 @@ def_poi_mapping_amenity: &poi_mapping_amenity - bank - bar - bbq + - bicycle_parking - bicycle_rental - biergarten - bus_station @@ -35,8 +36,10 @@ def_poi_mapping_amenity: &poi_mapping_amenity - kindergarten - library - marketplace + - motorcycle_parking - nightclub - nursing_home + - parking - pharmacy - place_of_worship - police @@ -70,6 +73,10 @@ def_poi_mapping_barrier: &poi_mapping_barrier - stile - toll_booth +# building values , see http://taginfo.openstreetmap.org/keys/building#values +def_poi_mapping_building: &poi_mapping_building + - dormitory + # highway values , see http://taginfo.openstreetmap.org/keys/highway#values def_poi_mapping_highway: &poi_mapping_highway - bus_stop @@ -86,6 +93,7 @@ def_poi_mapping_landuse: &poi_mapping_landuse - brownfield - cemetery - reservoir + - winter_sports # leisure values , see http://taginfo.openstreetmap.org/keys/leisure#values def_poi_mapping_leisure: &poi_mapping_leisure @@ -306,132 +314,78 @@ def_poi_mapping_tourism: &poi_mapping_tourism def_poi_mapping_waterway: &poi_mapping_waterway - dock +def_poi_fields: &poi_fields + - name: osm_id + type: id + - name: geometry + type: geometry + - name: name + key: name + type: string + - name: name_en + key: name:en + type: string + - name: name_de + key: name:de + type: string + - name: tags + type: hstore_tags + - name: subclass + type: mapping_value + - name: mapping_key + type: mapping_key + - name: station + key: station + type: string + - name: funicular + key: funicular + type: string + - name: information + key: information + type: string + - name: uic_ref + key: uic_ref + type: string + - name: religion + key: religion + type: string + - name: level + key: level + type: integer + - name: indoor + key: indoor + type: bool + - name: layer + key: layer + type: integer + - name: sport + key: sport + type: string + +def_poi_mapping: &poi_mapping + aerialway: *poi_mapping_aerialway + amenity: *poi_mapping_amenity + barrier: *poi_mapping_barrier + building: *poi_mapping_building + highway: *poi_mapping_highway + historic: *poi_mapping_historic + landuse: *poi_mapping_landuse + leisure: *poi_mapping_leisure + railway: *poi_mapping_railway + shop: *poi_mapping_shop + sport: *poi_mapping_sport + tourism: *poi_mapping_tourism + waterway: *poi_mapping_waterway + tables: # etldoc: imposm3 -> osm_poi_point poi_point: type: point - fields: - - name: osm_id - type: id - - name: geometry - type: geometry - - name: name - key: name - type: string - - name: name_en - key: name:en - type: string - - name: name_de - key: name:de - type: string - - name: tags - type: hstore_tags - - name: subclass - type: mapping_value - - name: mapping_key - type: mapping_key - - name: station - key: station - type: string - - name: funicular - key: funicular - type: string - - name: information - key: information - type: string - - name: uic_ref - key: uic_ref - type: string - - name: religion - key: religion - type: string - - name: level - key: level - type: integer - - name: indoor - key: indoor - type: bool - - name: layer - key: layer - type: integer - - name: sport - key: sport - type: string - mapping: - aerialway: *poi_mapping_aerialway - amenity: *poi_mapping_amenity - barrier: *poi_mapping_barrier - highway: *poi_mapping_highway - historic: *poi_mapping_historic - landuse: *poi_mapping_landuse - leisure: *poi_mapping_leisure - railway: *poi_mapping_railway - shop: *poi_mapping_shop - sport: *poi_mapping_sport - tourism: *poi_mapping_tourism - waterway: *poi_mapping_waterway - + fields: *poi_fields + mapping: *poi_mapping # etldoc: imposm3 -> osm_poi_polygon poi_polygon: type: polygon - fields: - - name: osm_id - type: id - - name: geometry - type: geometry - - name: name - key: name - type: string - - name: name_en - key: name:en - type: string - - name: name_de - key: name:de - type: string - - name: tags - type: hstore_tags - - name: subclass - type: mapping_value - - name: mapping_key - type: mapping_key - - name: station - key: station - type: string - - name: funicular - key: funicular - type: string - - name: information - key: information - type: string - - name: uic_ref - key: uic_ref - type: string - - name: religion - key: religion - type: string - - name: level - key: level - type: integer - - name: indoor - key: indoor - type: bool - - name: layer - key: layer - type: integer - - name: sport - key: sport - type: string - mapping: - aerialway: *poi_mapping_aerialway - amenity: *poi_mapping_amenity - barrier: *poi_mapping_barrier - highway: *poi_mapping_highway - historic: *poi_mapping_historic - landuse: *poi_mapping_landuse - leisure: *poi_mapping_leisure - railway: *poi_mapping_railway - shop: *poi_mapping_shop - sport: *poi_mapping_sport - tourism: *poi_mapping_tourism - waterway: *poi_mapping_waterway + fields: *poi_fields + mapping: *poi_mapping diff --git a/layers/poi/mapping_diagram.png b/layers/poi/mapping_diagram.png index a764b5c..3fe9c14 100644 Binary files a/layers/poi/mapping_diagram.png and b/layers/poi/mapping_diagram.png differ diff --git a/layers/poi/poi.yaml b/layers/poi/poi.yaml index b72ea84..bd66285 100644 --- a/layers/poi/poi.yaml +++ b/layers/poi/poi.yaml @@ -18,15 +18,21 @@ layer: description: | Original value of either the [`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity), - [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure), - [`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse), - [`railway`](http://wiki.openstreetmap.org/wiki/Key:railway), - [`station`](http://wiki.openstreetmap.org/wiki/Key:station), - [`sport`](http://wiki.openstreetmap.org/wiki/Key:sport), - [`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism), + [`barrier`](http://wiki.openstreetmap.org/wiki/Key:barrier), + [`historic`](http://wiki.openstreetmap.org/wiki/Key:historic), [`information`](http://wiki.openstreetmap.org/wiki/Key:information), - [`religion`](http://wiki.openstreetmap.org/wiki/Key:religion) - or [`shop`](http://wiki.openstreetmap.org/wiki/Key:shop) + [`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse), + [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure), + [`railway`](http://wiki.openstreetmap.org/wiki/Key:railway), + [`shop`](http://wiki.openstreetmap.org/wiki/Key:shop), + [`sport`](http://wiki.openstreetmap.org/wiki/Key:sport), + [`station`](http://wiki.openstreetmap.org/wiki/Key:station), + [`religion`](http://wiki.openstreetmap.org/wiki/Key:religion), + [`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism), + [`aerialway`](http://wiki.openstreetmap.org/wiki/Key:aerialway), + [`building`](http://wiki.openstreetmap.org/wiki/Key:building), + [`highway`](http://wiki.openstreetmap.org/wiki/Key:highway) + or [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag. Use this to do more precise styling. rank: | The POIs are ranked ascending according to their importance within a grid. The `rank` value shows the diff --git a/layers/transportation/class.sql b/layers/transportation/class.sql index ebb74ce..3c632f4 100644 --- a/layers/transportation/class.sql +++ b/layers/transportation/class.sql @@ -42,3 +42,13 @@ CREATE OR REPLACE FUNCTION service_value(service TEXT) RETURNS TEXT AS $$ ELSE NULL END; $$ LANGUAGE SQL IMMUTABLE STRICT; + +-- Limit surface to only the most important values to ensure +-- we always know the values of surface +CREATE OR REPLACE FUNCTION surface_value(surface TEXT) RETURNS TEXT AS $$ + SELECT CASE + WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'concrete', 'concrete:lanes', 'concrete:plates', 'metal', 'paving_stones', 'sett', 'unhewn_cobblestone', 'wood') THEN 'paved' + WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'gravel_turf', 'ground', 'ice', 'mud', 'pebblestone', 'salt', 'sand', 'snow', 'woodchips') THEN 'unpaved' + ELSE NULL + END; +$$ LANGUAGE SQL IMMUTABLE STRICT; diff --git a/layers/transportation/layer.sql b/layers/transportation/layer.sql index 9b555d0..928f63b 100644 --- a/layers/transportation/layer.sql +++ b/layers/transportation/layer.sql @@ -8,7 +8,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int) RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text, ramp int, oneway int, brunnel TEXT, service TEXT, layer INT, level INT, -indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ +indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale, surface TEXT) AS $$ SELECT osm_id, geometry, CASE @@ -37,7 +37,8 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULLIF(bicycle, '') AS bicycle, NULLIF(foot, '') AS foot, NULLIF(horse, '') AS horse, - NULLIF(mtb_scale, '') AS mtb_scale + NULLIF(mtb_scale, '') AS mtb_scale, + NULLIF(surface, '') AS surface FROM ( -- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4 SELECT @@ -49,6 +50,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen7 WHERE zoom_level = 4 @@ -64,7 +66,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen6 WHERE zoom_level = 5 UNION ALL @@ -79,7 +81,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen5 WHERE zoom_level = 6 UNION ALL @@ -94,7 +96,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen4 WHERE zoom_level = 7 UNION ALL @@ -109,7 +111,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen3 WHERE zoom_level = 8 UNION ALL @@ -125,7 +127,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, bicycle, foot, horse, mtb_scale, - z_order + NULL AS surface, z_order FROM osm_highway_linestring_gen2 WHERE zoom_level BETWEEN 9 AND 10 AND st_length(geometry)>zres(11) @@ -141,7 +143,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, bicycle, foot, horse, mtb_scale, - z_order + NULL AS surface, z_order FROM osm_highway_linestring_gen1 WHERE zoom_level = 11 AND st_length(geometry)>zres(12) @@ -163,6 +165,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ ELSE NULL::boolean END AS indoor, bicycle, foot, horse, mtb_scale, + surface_value(surface) AS "surface", z_order FROM osm_highway_linestring WHERE NOT is_area AND ( @@ -195,7 +198,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL as surface, z_order FROM osm_railway_linestring_gen5 WHERE zoom_level = 8 AND railway='rail' AND service = '' and usage='main' @@ -211,7 +214,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_railway_linestring_gen4 WHERE zoom_level = 9 AND railway='rail' AND service = '' and usage='main' @@ -225,7 +228,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_railway_linestring_gen3 WHERE zoom_level = 10 AND railway IN ('rail', 'narrow_gauge') AND service = '' @@ -239,7 +242,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL as surface, z_order FROM osm_railway_linestring_gen2 WHERE zoom_level = 11 AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' @@ -253,7 +256,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL as surface, z_order FROM osm_railway_linestring_gen1 WHERE zoom_level = 12 AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' @@ -268,7 +271,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL as surface, z_order FROM osm_railway_linestring WHERE zoom_level = 13 AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' @@ -283,7 +286,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_aerialway_linestring_gen1 WHERE zoom_level = 12 UNION ALL @@ -297,7 +300,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_aerialway_linestring WHERE zoom_level >= 13 UNION ALL @@ -310,7 +313,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_shipway_linestring_gen2 WHERE zoom_level = 11 UNION ALL @@ -324,6 +327,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, z_order + NULL AS surface, z_order FROM osm_shipway_linestring_gen1 WHERE zoom_level = 12 UNION ALL @@ -337,7 +341,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_shipway_linestring WHERE zoom_level >= 13 UNION ALL @@ -358,7 +362,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$ FALSE AS is_ramp, FALSE::int AS is_oneway, man_made, layer, NULL::int AS level, NULL::boolean AS indoor, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, - z_order + NULL AS surface, z_order FROM osm_highway_polygon -- We do not want underground pedestrian areas for now WHERE zoom_level >= 13 diff --git a/layers/transportation/mapping.yaml b/layers/transportation/mapping.yaml index bddc8e9..7d925a7 100644 --- a/layers/transportation/mapping.yaml +++ b/layers/transportation/mapping.yaml @@ -148,6 +148,9 @@ horse_field: &horse mtb_scale_field: &mtb_scale key: mtb:scale name: mtb_scale +surface_field: &surface + key: surface + name: surface type: string tables: @@ -188,6 +191,7 @@ tables: - *foot - *horse - *mtb_scale + - *surface mapping: highway: - motorway @@ -291,6 +295,7 @@ tables: mapping: aerialway: - cable_car + - gondola # etldoc: imposm3 -> osm_shipway_linestring shipway_linestring: diff --git a/layers/transportation/mapping_diagram.png b/layers/transportation/mapping_diagram.png index 2b4783c..ef040b4 100644 Binary files a/layers/transportation/mapping_diagram.png and b/layers/transportation/mapping_diagram.png differ diff --git a/layers/transportation/transportation.yaml b/layers/transportation/transportation.yaml index 87aea72..0ede861 100644 --- a/layers/transportation/transportation.yaml +++ b/layers/transportation/transportation.yaml @@ -36,6 +36,7 @@ layer: - rail - transit - cable_car + - gondola - ferry - bridge - pier @@ -117,10 +118,16 @@ layer: mtb_scale: description: | Original value of the [`mtb:scale`](http://wiki.openstreetmap.org/wiki/Key:mtb:scale) tag (highways only). + surface: + description: | + Values of [`surface`](https://wiki.openstreetmap.org/wiki/Key:surface) tag devided into 2 groups `paved` (paved, asphalt, cobblestone, concrete, concrete:lanes, concrete:plates, metal, paving_stones, sett, unhewn_cobblestone, wood) and `unpaved` (unpaved, compacted, dirt, earth, fine_gravel, grass, grass_paver, gravel, gravel_turf, ground, ice, mud, pebblestone, salt, sand, snow, woodchips). + values: + - paved + - unpaved datasource: geometry_field: geometry srid: 900913 - query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, bicycle, foot, horse, mtb_scale FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, bicycle, foot, horse, mtb_scale, surface FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t schema: - ./class.sql - ./update_transportation_merge.sql diff --git a/layers/water/mapping.yaml b/layers/water/mapping.yaml index dadd72b..8185eef 100644 --- a/layers/water/mapping.yaml +++ b/layers/water/mapping.yaml @@ -69,6 +69,9 @@ tables: - name: waterway key: waterway type: string + - name: is_intermittent + key: intermittent + type: bool filters: reject: covered: ["yes"] diff --git a/layers/water/water.sql b/layers/water/water.sql index 2b4e88c..9605bee 100644 --- a/layers/water/water.sql +++ b/layers/water/water.sql @@ -1,6 +1,7 @@ CREATE OR REPLACE FUNCTION water_class(waterway TEXT) RETURNS TEXT AS $$ SELECT CASE WHEN waterway='' THEN 'lake' + WHEN waterway='lake' THEN 'lake' WHEN waterway='dock' THEN 'dock' ELSE 'river' END; @@ -10,122 +11,131 @@ $$ LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE VIEW water_z0 AS ( -- etldoc: ne_110m_ocean -> water_z0 - SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_ocean UNION ALL -- etldoc: ne_110m_lakes -> water_z0 - SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes + SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_lakes ); CREATE OR REPLACE VIEW water_z1 AS ( -- etldoc: ne_110m_ocean -> water_z1 - SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_ocean UNION ALL -- etldoc: ne_110m_lakes -> water_z1 - SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes + SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_lakes ); CREATE OR REPLACE VIEW water_z2 AS ( -- etldoc: ne_50m_ocean -> water_z2 - SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_ocean UNION ALL -- etldoc: ne_50m_lakes -> water_z2 - SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes + SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_lakes ); CREATE OR REPLACE VIEW water_z4 AS ( -- etldoc: ne_50m_ocean -> water_z4 - SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_ocean UNION ALL -- etldoc: ne_50m_lakes -> water_z4 - SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes + SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_lakes ); CREATE OR REPLACE VIEW water_z5 AS ( -- etldoc: ne_10m_ocean -> water_z5 - SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean UNION ALL -- etldoc: ne_10m_lakes -> water_z5 - SELECT geometry, 'lake'::text AS class FROM ne_10m_lakes + SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_lakes ); CREATE OR REPLACE VIEW water_z6 AS ( -- etldoc: ne_10m_ocean -> water_z6 - SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean UNION ALL -- etldoc: osm_water_polygon_gen6 -> water_z6 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen6 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen6 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z7 AS ( -- etldoc: ne_10m_ocean -> water_z7 - SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean UNION ALL -- etldoc: osm_water_polygon_gen5 -> water_z7 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen5 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen5 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z8 AS ( -- etldoc: osm_ocean_polygon_gen4 -> water_z8 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen4 + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen4 UNION ALL -- etldoc: osm_water_polygon_gen4 -> water_z8 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen4 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen4 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z9 AS ( -- etldoc: osm_ocean_polygon_gen3 -> water_z9 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen3 + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen3 UNION ALL -- etldoc: osm_water_polygon_gen3 -> water_z9 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen3 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen3 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z10 AS ( -- etldoc: osm_ocean_polygon_gen2 -> water_z10 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen2 + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen2 UNION ALL -- etldoc: osm_water_polygon_gen2 -> water_z10 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen2 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen2 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z11 AS ( -- etldoc: osm_ocean_polygon_gen1 -> water_z11 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen1 + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen1 UNION ALL -- etldoc: osm_water_polygon_gen1 -> water_z11 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen1 + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen1 + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z12 AS ( -- etldoc: osm_ocean_polygon_gen1 -> water_z12 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon UNION ALL -- etldoc: osm_water_polygon -> water_z12 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z13 AS ( -- etldoc: osm_ocean_polygon -> water_z13 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon UNION ALL -- etldoc: osm_water_polygon -> water_z13 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon + WHERE "natural" != 'bay' ); CREATE OR REPLACE VIEW water_z14 AS ( -- etldoc: osm_ocean_polygon -> water_z14 - SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon + SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon UNION ALL -- etldoc: osm_water_polygon -> water_z14 - SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon + SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon + WHERE "natural" != 'bay' ); -- etldoc: layer_water [shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: label="layer_water | z0|z1|z2|z3 | z4|z5|z6|z7| z8 | z9 | z10 | z11 | z12| z13| z14+" ] ; CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int) -RETURNS TABLE(geometry geometry, class text) AS $$ - SELECT geometry, class::text FROM ( +RETURNS TABLE(geometry geometry, class text, intermittent int) AS $$ + SELECT geometry, class::text, is_intermittent::int AS intermittent FROM ( -- etldoc: water_z0 -> layer_water:z0 SELECT * FROM water_z0 WHERE zoom_level = 0 UNION ALL diff --git a/layers/water/water.yaml b/layers/water/water.yaml index 934e78b..ca0edb8 100644 --- a/layers/water/water.yaml +++ b/layers/water/water.yaml @@ -4,22 +4,26 @@ layer: Water polygons representing oceans and lakes. Covered watered areas are excluded (`covered=yes`). On low zoom levels all water originates from Natural Earth. To get a more correct display of the south pole you should also style the covering ice shelves over the water. - On higher zoom levels water polygons from [OpenStreetMapData](http://openstreetmapdata.com/) are used. + On higher zoom levels water polygons from [OpenStreetMapData](http://osmdata.openstreetmap.de/) are used. The polygons are split into many smaller polygons to improve rendering performance. This however can lead to less rendering options in clients since these boundaries show up. So you might not be able to use border styling for ocean water features. fields: class: description: | - All water polygons from [OpenStreetMapData](http://openstreetmapdata.com/) have the class `ocean`. + All water polygons from [OpenStreetMapData](http://osmdata.openstreetmap.de/) have the class `ocean`. Water bodies are classified as `lake` or `river` for water bodies with the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag. values: - ocean - lake - river + intermittent: + description: | + Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) water polygon. + values: [0, 1] buffer_size: 4 datasource: - query: (SELECT geometry, class FROM layer_water(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, class, intermittent FROM layer_water(!bbox!, z(!scale_denominator!))) AS t schema: - ./water.sql datasources: diff --git a/layers/water_name/layer.sql b/layers/water_name/layer.sql index f59c996..e0b60cd 100644 --- a/layers/water_name/layer.sql +++ b/layers/water_name/layer.sql @@ -3,7 +3,7 @@ -- etldoc: label="layer_water_name | z0_8 | z9_13 | z14+" ] ; CREATE OR REPLACE FUNCTION layer_water_name(bbox geometry, zoom_level integer) -RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, class text) AS $$ +RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, class text, intermittent int) AS $$ -- etldoc: osm_water_lakeline -> layer_water_name:z9_13 -- etldoc: osm_water_lakeline -> layer_water_name:z14_ SELECT @@ -14,7 +14,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, - 'lake'::text AS class + 'lake'::text AS class, + is_intermittent::int AS intermittent FROM osm_water_lakeline WHERE geometry && bbox AND ((zoom_level BETWEEN 9 AND 13 AND LineLabel(zoom_level, NULLIF(name, ''), geometry)) @@ -30,7 +31,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, - 'lake'::text AS class + 'lake'::text AS class, + is_intermittent::int AS intermittent FROM osm_water_point WHERE geometry && bbox AND ( (zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level)) @@ -44,7 +46,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, - place::text AS class + place::text AS class, + is_intermittent::int AS intermittent FROM osm_marine_point WHERE geometry && bbox AND ( place = 'ocean' diff --git a/layers/water_name/mapping.yaml b/layers/water_name/mapping.yaml index 64f06d4..7d27ac4 100644 --- a/layers/water_name/mapping.yaml +++ b/layers/water_name/mapping.yaml @@ -24,6 +24,9 @@ tables: - name: rank key: rank type: integer + - name: is_intermittent + key: intermittent + type: bool filters: require: name: ["__any__"] diff --git a/layers/water_name/update_marine_point.sql b/layers/water_name/update_marine_point.sql index 983bef4..c33a506 100644 --- a/layers/water_name/update_marine_point.sql +++ b/layers/water_name/update_marine_point.sql @@ -12,7 +12,7 @@ BEGIN -- etldoc: osm_marine_point -> osm_marine_point WITH important_marine_point AS ( - SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank + SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, osm.is_intermittent FROM ne_10m_geography_marine_polys AS ne, osm_marine_point AS osm WHERE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.name OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:en' diff --git a/layers/water_name/update_water_lakeline.sql b/layers/water_name/update_water_lakeline.sql index 979ac7e..3136d8e 100644 --- a/layers/water_name/update_water_lakeline.sql +++ b/layers/water_name/update_water_lakeline.sql @@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS ( ll.wkb_geometry AS geometry, name, name_en, name_de, update_tags(tags, ll.wkb_geometry) AS tags, - ST_Area(wp.geometry) AS area + ST_Area(wp.geometry) AS area, + is_intermittent FROM osm_water_polygon AS wp INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE wp.name <> '' AND ST_IsValid(wp.geometry) diff --git a/layers/water_name/update_water_point.sql b/layers/water_name/update_water_point.sql index 8874201..66bff8f 100644 --- a/layers/water_name/update_water_point.sql +++ b/layers/water_name/update_water_point.sql @@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_point AS ( wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry, wp.name, wp.name_en, wp.name_de, update_tags(wp.tags, ST_PointOnSurface(wp.geometry)) AS tags, - ST_Area(wp.geometry) AS area + ST_Area(wp.geometry) AS area, + wp.is_intermittent FROM osm_water_polygon AS wp LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE ll.osm_id IS NULL AND wp.name <> '' diff --git a/layers/water_name/water_name.yaml b/layers/water_name/water_name.yaml index c1263fb..68a7f7e 100644 --- a/layers/water_name/water_name.yaml +++ b/layers/water_name/water_name.yaml @@ -13,6 +13,10 @@ layer: At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*. values: - lake + intermittent: + description: | + Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) lake. + values: [0, 1] buffer_size: 256 srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over datasource: @@ -20,7 +24,7 @@ layer: key_field: osm_id key_field_as_attribute: no srid: 900913 - query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, intermittent FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t schema: - ./update_marine_point.sql - ./update_water_lakeline.sql diff --git a/layers/waterway/mapping.yaml b/layers/waterway/mapping.yaml index cfb17e9..2255b16 100644 --- a/layers/waterway/mapping.yaml +++ b/layers/waterway/mapping.yaml @@ -49,6 +49,9 @@ tables: type: hstore_tags - *tunnel - *bridge + - name: is_intermittent + key: intermittent + type: bool mapping: waterway: - stream diff --git a/layers/waterway/waterway.sql b/layers/waterway/waterway.sql index 925b999..64838f6 100644 --- a/layers/waterway/waterway.sql +++ b/layers/waterway/waterway.sql @@ -8,60 +8,60 @@ $$ LANGUAGE SQL IMMUTABLE STRICT; -- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3 CREATE OR REPLACE VIEW waterway_z3 AS ( - SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM ne_110m_rivers_lake_centerlines WHERE featurecla = 'River' ); -- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4 CREATE OR REPLACE VIEW waterway_z4 AS ( - SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM ne_50m_rivers_lake_centerlines WHERE featurecla = 'River' ); -- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6 CREATE OR REPLACE VIEW waterway_z6 AS ( - SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM ne_10m_rivers_lake_centerlines WHERE featurecla = 'River' ); -- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9 CREATE OR REPLACE VIEW waterway_z9 AS ( - SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM osm_important_waterway_linestring_gen3 ); -- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10 CREATE OR REPLACE VIEW waterway_z10 AS ( - SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM osm_important_waterway_linestring_gen2 ); -- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11 CREATE OR REPLACE VIEW waterway_z11 AS ( - SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel + SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent FROM osm_important_waterway_linestring_gen1 ); -- etldoc: osm_waterway_linestring -> waterway_z12 CREATE OR REPLACE VIEW waterway_z12 AS ( - SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel + SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent FROM osm_waterway_linestring WHERE waterway IN ('river', 'canal') ); -- etldoc: osm_waterway_linestring -> waterway_z13 CREATE OR REPLACE VIEW waterway_z13 AS ( - SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel + SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent FROM osm_waterway_linestring WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') ); -- etldoc: osm_waterway_linestring -> waterway_z14 CREATE OR REPLACE VIEW waterway_z14 AS ( - SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel + SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent FROM osm_waterway_linestring ); @@ -69,12 +69,13 @@ CREATE OR REPLACE VIEW waterway_z14 AS ( -- etldoc: label="layer_waterway | z3 | z4-z5 | z6-8 | z9 | z10 | z11 | z12| z13| z14+" ]; CREATE OR REPLACE FUNCTION layer_waterway(bbox geometry, zoom_level int) -RETURNS TABLE(geometry geometry, class text, name text, name_en text, name_de text, brunnel text, tags hstore) AS $$ +RETURNS TABLE(geometry geometry, class text, name text, name_en text, name_de text, brunnel text, intermittent int, tags hstore) AS $$ SELECT geometry, class, NULLIF(name, '') AS name, COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, waterway_brunnel(is_bridge, is_tunnel) AS brunnel, + is_intermittent::int AS intermittent, tags FROM ( -- etldoc: waterway_z3 -> layer_waterway:z3 diff --git a/layers/waterway/waterway.yaml b/layers/waterway/waterway.yaml index d7d8727..8c10900 100644 --- a/layers/waterway/waterway.yaml +++ b/layers/waterway/waterway.yaml @@ -1,7 +1,7 @@ layer: id: "waterway" description: | - OpenStreetMap [waterways](http://wiki.openstreetmap.org/wiki/Waterways) for higher zoom levels + OpenStreetMap [waterways](https://wiki.openstreetmap.org/wiki/Waterways) for higher zoom levels and Natural Earth rivers and lake centerlines for low zoom levels. Linestrings without a name or which are too short are filtered out at low zoom levels. Waterways do no not have a `subclass` field. @@ -27,9 +27,13 @@ layer: values: - bridge - tunnel + intermittent: + description: | + Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) waterway. + values: [0, 1] datasource: geometry_field: geometry - query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, brunnel FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, brunnel, intermittent FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t schema: - ./update_waterway_linestring.sql - ./update_important_waterway.sql diff --git a/openmaptiles.yaml b/openmaptiles.yaml index a550fcd..26cb732 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -17,7 +17,7 @@ tileset: - layers/poi/poi.yaml - layers/aerodrome_label/aerodrome_label.yaml name: OpenMapTiles - version: 3.9.0 + version: 3.10.0 id: openmaptiles description: "A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org" attribution: '© OpenMapTiles © OpenStreetMap contributors' @@ -34,6 +34,7 @@ tileset: - br # Breton, Latin - bs # Bosnian, Latin - ca # Catalan, Latin + - co # Corsican, Latin - cs # Czech, Latin - cy # Welsh, Latin - da # Danish, Latin @@ -43,6 +44,7 @@ tileset: - eo # Esperanto, Latin - es # Spanish, Latin - et # Estonian, Latin + - eu # Basque, Latin - fi # Finnish, Latin - fr # French, Latin - fy # Western Frisian, Latin @@ -52,6 +54,7 @@ tileset: - hr # Croatian, Latin - hu # Hungarian, Latin - hy # Armenian + - id # Indonesian, Latin - is # Icelandic, Latin - it # Italian, Latin - ja # Japanese @@ -71,6 +74,7 @@ tileset: - ml # Malayalam - nl # Dutch, Latin - "no" # Norwegian, Latin + - oc # Occitan (post 1500), Latin - pl # Polish, Latin - pt # Portuguese, Latin - rm # Romansh, Latin diff --git a/qa/layer_freq.sh b/qa/layer_freq.sh index 1ba1a90..4c9dd91 100755 --- a/qa/layer_freq.sh +++ b/qa/layer_freq.sh @@ -11,9 +11,9 @@ echo "# FREQ - $layerid group by : $classvars " for z in {0..15} do echo " " -echo "## $layerid z$z - freq" +echo "## $layerid z$z - freq" -SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) +SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) SQLCODE=$(cat <<-END select $classvars , count(*) as _count_ from @@ -29,7 +29,7 @@ END #echo "\`\`\`" docker-compose run --rm import-osm /usr/src/app/psql.sh -q -P pager=off -P border=2 -P footer=off -P null='(null)' -c "$SQLCODE" \ - | sed '1d;$d' | sed '$d' | sed 's/+--/|--/g' | sed 's/--+/--|/g' - + | sed '1d;$d' | sed '$d' | sed 's/+--/|--/g' | sed 's/--+/--|/g' + done diff --git a/qa/layer_numvar_analyze.sh b/qa/layer_numvar_analyze.sh index e786724..b6ea7b7 100755 --- a/qa/layer_numvar_analyze.sh +++ b/qa/layer_numvar_analyze.sh @@ -13,17 +13,17 @@ do echo " " echo "## $layerid z$z - $var " -SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) +SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) SQLCODE=$(cat <<-END -SELECT +SELECT count($var) as count - ,min($var) as min - ,max($var) as max - ,avg($var) as avg - ,stddev($var) as stddev - ,variance($var) as variance -FROM + ,min($var) as min + ,max($var) as max + ,avg($var) as avg + ,stddev($var) as stddev + ,variance($var) as variance +FROM ( $SQL ) as t ; END @@ -35,6 +35,6 @@ END #echo "\`\`\`" docker-compose run --rm import-osm /usr/src/app/psql.sh -q -P pager=off -P border=2 -P footer=off -P null='(null)' -c "$SQLCODE" \ - | sed '1d;$d' | sed '$d' | sed 's/+--/|--/g' | sed 's/--+/--|/g' - + | sed '1d;$d' | sed '$d' | sed 's/+--/|--/g' | sed 's/--+/--|/g' + done diff --git a/qa/layer_toplength.sh b/qa/layer_toplength.sh index a72e902..a43a93b 100755 --- a/qa/layer_toplength.sh +++ b/qa/layer_toplength.sh @@ -11,7 +11,7 @@ do echo " " echo "## $layerid z$z max length ($classvar)" -SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) +SQL=$(docker run --rm -v $(pwd):/tileset openmaptiles/openmaptiles-tools generate-sqlquery layers/${layerid}/${layerid}.yaml $z ) SQLCODE=$(cat <<-END SELECT DISTINCT $classvar , length( $classvar ) AS _length_ from diff --git a/qa/run.sh b/qa/run.sh index ea9f573..f0a1b96 100755 --- a/qa/run.sh +++ b/qa/run.sh @@ -7,7 +7,7 @@ set -o nounset # or make generate-qareports # ---- freq --------------------------------------------------------------- - + mkdir -p ./build/qareports rm -f ./build/qareports/*.md @@ -26,26 +26,26 @@ rm -f ./build/qareports/*.md ./qa/layer_freq.sh landuse "class " > ./build/qareports/freq_landuse__class.md -./qa/layer_freq.sh park "class " > ./build/qareports/freq_park__class.md +./qa/layer_freq.sh park "class " > ./build/qareports/freq_park__class.md -./qa/layer_freq.sh place "class " > ./build/qareports/freq_place__class.md +./qa/layer_freq.sh place "class " > ./build/qareports/freq_place__class.md ./qa/layer_freq.sh place "class,capital " > ./build/qareports/freq_place__class_capital.md -./qa/layer_freq.sh place "capital " > ./build/qareports/freq_place__capital.md -./qa/layer_freq.sh place "class,capital,rank " > ./build/qareports/freq_place__class_capital_rank.md -./qa/layer_freq.sh place "rank " > ./build/qareports/freq_place__rank.md +./qa/layer_freq.sh place "capital " > ./build/qareports/freq_place__capital.md +./qa/layer_freq.sh place "class,capital,rank " > ./build/qareports/freq_place__class_capital_rank.md +./qa/layer_freq.sh place "rank " > ./build/qareports/freq_place__rank.md -./qa/layer_freq.sh poi "class " > ./build/qareports/freq_poi__class.md +./qa/layer_freq.sh poi "class " > ./build/qareports/freq_poi__class.md ./qa/layer_freq.sh poi "subclass " > ./build/qareports/freq_poi__subclass.md -./qa/layer_freq.sh poi "rank " > ./build/qareports/freq_poi__rank.md -./qa/layer_freq.sh poi "class,subclass " > ./build/qareports/freq_poi__class_subclass.md -./qa/layer_freq.sh poi "class,subclass,rank" > ./build/qareports/freq_poi__class_subclass_rank.md +./qa/layer_freq.sh poi "rank " > ./build/qareports/freq_poi__rank.md +./qa/layer_freq.sh poi "class,subclass " > ./build/qareports/freq_poi__class_subclass.md +./qa/layer_freq.sh poi "class,subclass,rank" > ./build/qareports/freq_poi__class_subclass_rank.md ./qa/layer_freq.sh poi "class,rank " > ./build/qareports/freq_poi__class_rank.md -./qa/layer_freq.sh transportation "class, oneway, ramp, brunnel, service" > ./build/qareports/freq_transportation__class_oneway_ramp_brunnel_service.md -./qa/layer_freq.sh transportation "oneway, ramp, brunnel, service " > ./build/qareports/freq_transportation__oneway_ramp_brunnel_service.md -./qa/layer_freq.sh transportation "class " > ./build/qareports/freq_transportation__class.md +./qa/layer_freq.sh transportation "class, oneway, ramp, brunnel, service" > ./build/qareports/freq_transportation__class_oneway_ramp_brunnel_service.md +./qa/layer_freq.sh transportation "oneway, ramp, brunnel, service " > ./build/qareports/freq_transportation__oneway_ramp_brunnel_service.md +./qa/layer_freq.sh transportation "class " > ./build/qareports/freq_transportation__class.md -./qa/layer_freq.sh transportation_name "class " > ./build/qareports/freq_transportation_name__class.md +./qa/layer_freq.sh transportation_name "class " > ./build/qareports/freq_transportation_name__class.md ./qa/layer_freq.sh transportation_name "ref_length" > ./build/qareports/freq_transportation_name__ref_length.md ./qa/layer_freq.sh water "class " > ./build/qareports/freq_water__class.md @@ -56,22 +56,22 @@ rm -f ./build/qareports/*.md # ---- toplength ------------------------------------------- -./qa/layer_toplength.sh housenumber "housenumber" > ./build/qareports/toplength_housenumber__housenumber.md +./qa/layer_toplength.sh housenumber "housenumber" > ./build/qareports/toplength_housenumber__housenumber.md -./qa/layer_toplength.sh place "name" > ./build/qareports/toplength_place__name.md -./qa/layer_toplength.sh place "name_en" > ./build/qareports/toplength_place__name_en.md +./qa/layer_toplength.sh place "name" > ./build/qareports/toplength_place__name.md +./qa/layer_toplength.sh place "name_en" > ./build/qareports/toplength_place__name_en.md -./qa/layer_toplength.sh poi "name" > ./build/qareports/toplength_poi__name.md -./qa/layer_toplength.sh poi "name_en" > ./build/qareports/toplength_poi__name_en.md +./qa/layer_toplength.sh poi "name" > ./build/qareports/toplength_poi__name.md +./qa/layer_toplength.sh poi "name_en" > ./build/qareports/toplength_poi__name_en.md -./qa/layer_toplength.sh transportation_name "name" > ./build/qareports/toplength_transportation_name__name.md -./qa/layer_toplength.sh transportation_name "ref" > ./build/qareports/toplength_transportation_name__ref.md -###Todo: ./qa/layer_toplength.sh transportation_name "network" > ./build/qareports/toplength_transportation_name__network.md +./qa/layer_toplength.sh transportation_name "name" > ./build/qareports/toplength_transportation_name__name.md +./qa/layer_toplength.sh transportation_name "ref" > ./build/qareports/toplength_transportation_name__ref.md +###Todo: ./qa/layer_toplength.sh transportation_name "network" > ./build/qareports/toplength_transportation_name__network.md -./qa/layer_toplength.sh water_name "name" > ./build/qareports/toplength_water_name__name.md -./qa/layer_toplength.sh water_name "name_en" > ./build/qareports/toplength_water_name__name_en.md +./qa/layer_toplength.sh water_name "name" > ./build/qareports/toplength_water_name__name.md +./qa/layer_toplength.sh water_name "name_en" > ./build/qareports/toplength_water_name__name_en.md -./qa/layer_toplength.sh waterway "name" > ./build/qareports/toplength_waterway__name.md +./qa/layer_toplength.sh waterway "name" > ./build/qareports/toplength_waterway__name.md # ---- numvar analyze ------------------------------------- diff --git a/quickstart.sh b/quickstart.sh index 368790a..dbf1ee3 100755 --- a/quickstart.sh +++ b/quickstart.sh @@ -167,21 +167,21 @@ fi echo " " echo "-------------------------------------------------------------------------------------" echo "====> : Remove old generated source files ( ./build/* ) ( if they exist ) " -docker-compose run --rm openmaptiles-tools make clean +make clean echo " " echo "-------------------------------------------------------------------------------------" echo "====> : Code generating from the layer definitions ( ./build/mapping.yaml; ./build/tileset.sql )" echo " : The tool source code: https://github.com/openmaptiles/openmaptiles-tools " echo " : But we generate the tm2source, Imposm mappings and SQL functions from the layer definitions! " -docker-compose run --rm openmaptiles-tools make +make echo " " echo "-------------------------------------------------------------------------------------" echo "====> : Start PostgreSQL service ; create PostgreSQL data volume " echo " : Source code: https://github.com/openmaptiles/postgis " echo " : Thank you: https://www.postgresql.org ! Thank you http://postgis.org !" -docker-compose up -d postgres +docker-compose up -d postgres echo " " echo "-------------------------------------------------------------------------------------" @@ -192,10 +192,10 @@ make forced-clean-sql echo " " echo "-------------------------------------------------------------------------------------" -echo "====> : Start importing water data from http://openstreetmapdata.com into PostgreSQL " +echo "====> : Start importing water data from http://osmdata.openstreetmap.de/ into PostgreSQL " echo " : Source code: https://github.com/openmaptiles/import-water " -echo " : Data license: http://openstreetmapdata.com/info/license " -echo " : Thank you: http://openstreetmapdata.com/info/supporting " +echo " : Data license: https://osmdata.openstreetmap.de/info/license.html " +echo " : Thank you: https://osmdata.openstreetmap.de/info/ " docker-compose run --rm import-water echo " "