Merge branch 'master' into bicycle-foot-horse-mtb_scale

This commit is contained in:
zstadler 2019-10-25 16:09:44 +03:00 committed by GitHub
commit 556bfb889d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 617 additions and 434 deletions

View File

@ -13,4 +13,4 @@ Your pull request must:
* Be possible to merge automatically. * 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. 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.

6
.gitignore vendored
View File

@ -15,4 +15,8 @@ data/*
wikidata/* wikidata/*
# generated source files # generated source files
build/* build/*
# any IDE files
.idea/
.vscode/

View File

@ -6,7 +6,7 @@ language: bash
services: services:
- docker - docker
before_install: before_install:
- sudo rm -f /usr/local/bin/docker-compose - 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 - 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 - sudo service docker restart
- docker-compose -v - docker-compose -v
- docker -v - docker -v
script: script:
- sudo service docker restart - sudo service docker restart
- docker-compose config - docker-compose config
- sudo ./quickstart.sh - sudo ./quickstart.sh

47
CONTRIBUTING.md Normal file
View File

@ -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.

View File

@ -20,7 +20,9 @@ help:
@echo " make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE" @echo " make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE"
@echo " make psql-analyze # PostgreSQL: ANALYZE" @echo " make psql-analyze # PostgreSQL: ANALYZE"
@echo " make generate-qareports # generate reports [./build/qareports]" @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-sql-dev # start import-sql /bin/bash terminal"
@echo " make import-osm-dev # start import-osm /bin/bash terminal (imposm3)" @echo " make import-osm-dev # start import-osm /bin/bash terminal (imposm3)"
@echo " make clean-docker # remove docker containers, PG data volume" @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-views # list PostgreSQL public schema views"
@echo " make pgclimb-list-tables # list PostgreSQL public schema tables" @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 .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 " make help # help about available commands"
@echo "==============================================================================" @echo "=============================================================================="
build/openmaptiles.tm2source/data.yml: build:
mkdir -p build/openmaptiles.tm2source && generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > build/openmaptiles.tm2source/data.yml mkdir -p build
build/mapping.yaml: build/openmaptiles.tm2source/data.yml: build
mkdir -p build && generate-imposm3 openmaptiles.yaml > build/mapping.yaml 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: build/mapping.yaml: build
mkdir -p build && generate-sql openmaptiles.yaml > build/tileset.sql 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: clean:
rm -f build/openmaptiles.tm2source/data.yml && rm -f build/mapping.yaml && rm -f build/tileset.sql 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 psql: db-start
docker-compose run --rm import-osm /usr/src/app/psql.sh docker-compose run --rm import-osm /usr/src/app/psql.sh
cfg-remake: import-osm: db-start all
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
docker-compose run --rm import-osm docker-compose run --rm import-osm
import-sql: db-start import-sql: db-start all
docker-compose run --rm openmaptiles-tools make clean
docker-compose run --rm openmaptiles-tools make
docker-compose run --rm import-sql docker-compose run --rm import-sql
import-osmsql: db-start import-osmsql: db-start all
docker-compose run --rm openmaptiles-tools make clean
docker-compose run --rm openmaptiles-tools make
docker-compose run --rm import-osm docker-compose run --rm import-osm
docker-compose run --rm import-sql docker-compose run --rm import-sql
generate-tiles: db-start generate-tiles: db-start all
rm -rf data/tiles.mbtiles 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 \ if [ -f ./data/docker-compose-config.yml ]; then \
docker-compose -f docker-compose.yml -f ./data/docker-compose-config.yml run --rm generate-vectortiles; \ docker-compose -f docker-compose.yml -f ./data/docker-compose-config.yml run --rm generate-vectortiles; \
else \ else \
@ -147,23 +141,35 @@ start-postserve:
generate-qareports: generate-qareports:
./qa/run.sh ./qa/run.sh
# work in progress - please don't remove build/devdoc:
generate-devdoc:
mkdir -p ./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 layers = $(notdir $(wildcard layers/*)) # all layers
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 etl-graph:
docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/landcover/landcover.yaml ./build/devdoc @echo 'Use'
docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/landuse/landuse.yaml ./build/devdoc @echo ' make etl-graph-[layer] to generate etl graph for [layer]'
docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/park/park.yaml ./build/devdoc @echo ' example: make etl-graph-poi'
docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/place/place.yaml ./build/devdoc @echo 'Valid layers: $(layers)'
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 # generate etl graph for a certain layer, e.g. etl-graph-building, etl-graph-place
docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/transportation_name/transportation_name.yaml ./build/devdoc etl-graph-%: layers/% 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/$*/$*.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 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: import-sql-dev:
docker-compose run --rm import-sql /bin/bash docker-compose run --rm import-sql /bin/bash

View File

@ -1,5 +1,3 @@
## Quickstart - for small extracts ## Quickstart - for small extracts
### Req: ### Req:
@ -12,7 +10,9 @@
* Please give a feedback, share your experience, write a tutorial * Please give a feedback, share your experience, write a tutorial
* bash * bash
* git * git
* make * make
* bc
* md5sum
* docker >=1.12.3 * docker >=1.12.3
* https://www.docker.com/products/overview * https://www.docker.com/products/overview
* docker-compose >=1.7.1 * docker-compose >=1.7.1
@ -45,15 +45,15 @@ cd openmaptiles
If you have problems with the quickstart If you have problems with the quickstart
* check the ./quickstart.log! * check the ./quickstart.log!
* doublecheck the system requirements! * doublecheck the system requirements!
* check the current issues: https://github.com/openmaptiles/openmaptiles/issues * check the current issues: https://github.com/openmaptiles/openmaptiles/issues
* create new issues: * create new issues:
* create a new gist: https://gist.github.com/ from your ./quickstart.log * 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 * create a new issue: https://github.com/openmaptiles/openmaptiles/issues
* describe the problems * describe the problems
* add any pertinent information about your environment * add any pertinent information about your environment
* link your (quickstart.log) gist! * link your (quickstart.log) gist!
### Check other extracts ### Check other extracts
IF the previous step is working, 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 ### Check tileserver
start: start:
* ` make start-tileserver` * ` make start-tileserver`
and the generated maps are going to be available in webbrowser on [localhost:8080](http://localhost:8080/). 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 ### Change MIN_ZOOM and MAX_ZOOM
modify the settings in the `.env` file, the defaults : modify the settings in the `.env` file, the defaults :
* QUICKSTART_MIN_ZOOM=0 * QUICKSTART_MIN_ZOOM=0
* QUICKSTART_MAX_ZOOM=7 * QUICKSTART_MAX_ZOOM=7
and re-start `./quickstart.sh ` and re-start `./quickstart.sh `
* the new config file re-generating to here ./data/docker-compose-config.yml * the new config file re-generating to here ./data/docker-compose-config.yml
* Known problems: * 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 * Small increments! Never starts with the MAX_ZOOM = 14
* The suggested MAX_ZOOM = 14 - use only with small extracts * The suggested MAX_ZOOM = 14 - use only with small extracts
@ -408,37 +408,36 @@ the current output:
``` ```
============================================================================== ==============================================================================
OpenMapTiles https://github.com/openmaptiles/openmaptiles OpenMapTiles https://github.com/openmaptiles/openmaptiles
Hints for testing areas Hints for testing areas
make download-geofabrik-list # list actual geofabrik OSM extracts for download -> <<your-area>> make download-geofabrik-list # list actual geofabrik OSM extracts for download -> <<your-area>>
make list # list actual geofabrik OSM extracts for download -> <<your-area>> make list # list actual geofabrik OSM extracts for download -> <<your-area>>
./quickstart.sh <<your-area>> # example: ./quickstart.sh madagascar ./quickstart.sh <<your-area>> # example: ./quickstart.sh madagascar
Hints for designers: Hints for designers:
make start-postserve # start Postserver + Maputnik Editor [ see localhost:8088 ] make start-postserve # start Postserver + Maputnik Editor [ see localhost:8088 ]
make start-tileserver # start klokantech/tileserver-gl [ see localhost:8080 ] make start-tileserver # start klokantech/tileserver-gl [ see localhost:8080 ]
Hints for developers: 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 download-geofabrik area=albania # download OSM data from geofabrik, and create config file
make psql # start PostgreSQL console make psql # start PostgreSQL console
make psql-list-tables # list all PostgreSQL tables make psql-list-tables # list all PostgreSQL tables
make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE make psql-vacuum-analyze # PostgreSQL: VACUUM ANALYZE
make psql-analyze # PostgreSQL: ANALYZE make psql-analyze # PostgreSQL: ANALYZE
make generate-qareports # generate reports [./build/qareports] make generate-qareports # generate reports [./build/qareports]
make generate-devdoc # generate devdoc [./build/devdoc] 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 import-osm-dev # start import-osm /bin/bash terminal (imposm3)
make clean-docker # remove docker containers, PG data volume make clean-docker # remove docker containers, PG data volume
make forced-clean-sql # drop all PostgreSQL tables for clean environment make forced-clean-sql # drop all PostgreSQL tables for clean environment
make docker-unnecessary-clean # clean unnecessary docker image(s) and container(s) make docker-unnecessary-clean # clean unnecessary docker image(s) and container(s)
make refresh-docker-images # refresh openmaptiles docker images from Docker HUB make refresh-docker-images # refresh openmaptiles docker images from Docker HUB
make remove-docker-images # remove openmaptiles docker images make remove-docker-images # remove openmaptiles docker images
make pgclimb-list-views # list PostgreSQL public schema views make pgclimb-list-views # list PostgreSQL public schema views
make pgclimb-list-tables # list PostgreSQL public schema tables make pgclimb-list-tables # list PostgreSQL public schema tables
cat .env # list PG database and MIN_ZOOM and MAX_ZOOM information 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 make help # help about available commands
============================================================================== ==============================================================================
``` ```

View File

@ -1,12 +1,17 @@
## OpenMapTiles [![Build Status](https://travis-ci.org/openmaptiles/openmaptiles.svg?branch=master)](https://travis-ci.org/openmaptiles/openmaptiles) ## 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 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: http://openmaptiles.org/schema
- :link: Production package: http://openmaptiles.com/ - :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 ## Styles
@ -60,11 +65,10 @@ Together the layers make up the OpenMapTiles tileset.
## Develop ## 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](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 [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 ### Build
@ -75,8 +79,6 @@ git clone git@github.com:openmaptiles/openmaptiles.git
cd openmaptiles cd openmaptiles
# Build the imposm mapping, the tm2source project and collect all SQL scripts # Build the imposm mapping, the tm2source project and collect all SQL scripts
make 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) 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 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 ```bash
docker-compose run import-water docker-compose run import-water
@ -119,10 +121,10 @@ docker-compose run import-osm
### Work on Layers ### 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 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). 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 For a browsable electronic map based on OpenMapTiles and OpenStreetMap data, the
credit should appear in the corner of the map. For example: 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 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. description near the image, in the same fashion as if you cite a photograph.

View File

@ -18,7 +18,7 @@ services:
networks: networks:
- postgres_conn - postgres_conn
import-water: import-water:
image: "openmaptiles/import-water:0.6" image: "openmaptiles/import-water:1.1"
env_file: .env env_file: .env
networks: networks:
- postgres_conn - postgres_conn
@ -83,7 +83,7 @@ services:
volumes: volumes:
- ./wikidata:/import - ./wikidata:/import
openmaptiles-tools: openmaptiles-tools:
image: "openmaptiles/openmaptiles-tools:0.9.1" image: "openmaptiles/openmaptiles-tools:0.9.2"
env_file: .env env_file: .env
networks: networks:
- postgres_conn - postgres_conn

View File

@ -16,7 +16,6 @@ CREATE OR REPLACE VIEW boundary_z1 AS (
UNION ALL UNION ALL
SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime
FROM ne_50m_admin_1_states_provinces_lines FROM ne_50m_admin_1_states_provinces_lines
WHERE scalerank <= 2
); );
@ -43,29 +42,19 @@ CREATE OR REPLACE VIEW boundary_z4 AS (
UNION ALL UNION ALL
SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime
FROM ne_10m_admin_1_states_provinces_lines FROM ne_10m_admin_1_states_provinces_lines
WHERE scalerank <= 3 AND min_zoom <= 7 WHERE min_zoom <= 5
UNION ALL UNION ALL
SELECT geometry, admin_level, disputed, maritime SELECT geometry, admin_level, disputed, maritime
FROM osm_border_linestring_gen10 FROM osm_border_linestring_gen10
WHERE maritime=true AND admin_level <= 2 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 -- etldoc: osm_border_linestring_gen9 -> boundary_z5
CREATE OR REPLACE VIEW boundary_z5 AS ( 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 SELECT geometry, admin_level, disputed, maritime
FROM osm_border_linestring_gen9 FROM osm_border_linestring_gen9
WHERE maritime=true AND admin_level <= 2 WHERE admin_level <= 4
); );
-- etldoc: osm_border_linestring_gen8 -> boundary_z6 -- etldoc: osm_border_linestring_gen8 -> boundary_z6

View File

@ -1,10 +1,11 @@
layer: layer:
id: "boundary" id: "boundary"
description: | description: |
Contains administrative boundaries (no maritime boundaries yet) as linestrings. Contains administrative boundaries as linestrings.
Until z7 [Natural Earth data](http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/) Until z4 [Natural Earth data](http://www.naturalearthdata.com/downloads/) is used after which
is used after which OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative)) are present from z8 to z14. OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative))
OSM data contains all [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level) 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`. but for most styles it makes sense to just style `admin_level=2` and `admin_level=4`.
fields: fields:
admin_level: | admin_level: |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

@ -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(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(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, 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 FALSE as hide_3d
FROM FROM
osm_building_relation WHERE building = '' 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(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(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, 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 FALSE as hide_3d
FROM FROM
osm_building_associatedstreet WHERE role = 'house' 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(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(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, 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 FALSE as hide_3d
FROM FROM
osm_building_street WHERE role = 'house' 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(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(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, 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 FALSE as hide_3d
FROM FROM
osm_building_polygon obp WHERE EXISTS (SELECT 1 FROM osm_building_multipolygon obm WHERE obp.osm_id = obm.osm_id) 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.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.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, 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 CASE WHEN obr.role='outline' THEN TRUE ELSE FALSE END as hide_3d
FROM FROM
osm_building_polygon obp 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) 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, 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 CASE WHEN hide_3d THEN TRUE ELSE NULL::boolean END AS hide_3d
FROM ( FROM (
-- etldoc: osm_building_polygon_gen1 -> layer_building:z13 -- etldoc: osm_building_polygon_gen1 -> layer_building:z13
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL::int AS render_height, NULL::int AS render_min_height, NULL::int AS render_height, NULL::int AS render_min_height,
NULL::text AS material, NULL::text AS colour,
FALSE AS hide_3d FALSE AS hide_3d
FROM osm_building_polygon_gen1 FROM osm_building_polygon_gen1
WHERE zoom_level = 13 AND geometry && bbox 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, osm_id, geometry,
ceil( COALESCE(height, levels*3.66,5))::int AS render_height, 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, floor(COALESCE(min_height, min_level*3.66,0))::int AS render_min_height,
material,
colour,
hide_3d hide_3d
FROM osm_all_buildings FROM osm_all_buildings
WHERE WHERE

View File

@ -5,12 +5,14 @@ layer:
this is welcomed. this is welcomed.
buffer_size: 4 buffer_size: 4
datasource: 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: fields:
render_height: | 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. 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: | 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. 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: | 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. 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: schema:

View File

@ -17,6 +17,12 @@ tables:
type: area type: area
- name: webmerc_area - name: webmerc_area
type: webmerc_area type: webmerc_area
- name: material
key: building:material
type: string
- name: colour
key: building:colour
type: string
- name: building - name: building
key: building key: building
type: string type: string
@ -78,6 +84,12 @@ tables:
key: building key: building
type: string type: string
from_member: true from_member: true
- name: material
key: building:material
type: string
- name: colour
key: building:colour
type: string
- name: buildingpart - name: buildingpart
key: building:part key: building:part
type: string type: string
@ -166,6 +178,12 @@ tables:
key: building key: building
type: string type: string
from_member: true from_member: true
- name: material
key: building:material
type: string
- name: colour
key: building:colour
type: string
- name: buildingpart - name: buildingpart
key: building:part key: building:part
type: string type: string
@ -254,6 +272,12 @@ tables:
key: building key: building
type: string type: string
from_member: true from_member: true
- name: material
key: building:material
type: string
- name: colour
key: building:colour
type: string
- name: buildingpart - name: buildingpart
key: building:part key: building:part
type: string type: string
@ -342,6 +366,12 @@ tables:
key: building key: building
type: string type: string
from_member: true from_member: true
- name: material
key: building:material
type: string
- name: colour
key: building:colour
type: string
- name: buildingpart - name: buildingpart
key: building:part key: building:part
type: string type: string

View File

@ -25,7 +25,7 @@ CREATE OR REPLACE FUNCTION housenumber.flag() RETURNS trigger AS $$
BEGIN BEGIN
INSERT INTO housenumber.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; INSERT INTO housenumber.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
RETURN null; RETURN null;
END; END;
$$ language plpgsql; $$ language plpgsql;
CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS

View File

@ -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_> z14+" ] ; -- etldoc: label="layer_housenumber | <z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_housenumber(bbox geometry, zoom_level integer) CREATE OR REPLACE FUNCTION layer_housenumber(bbox geometry, zoom_level integer)

View File

@ -26,33 +26,35 @@ layer:
or [`wetland`](http://wiki.openstreetmap.org/wiki/Key:wetland) tag. or [`wetland`](http://wiki.openstreetmap.org/wiki/Key:wetland) tag.
values: values:
- allotments - allotments
- bare_rock
- beach
- bog
- farm - farm
- farmland - farmland
- orchard - forest
- plant_nursery - garden
- vineyard - glacier
- grass - grass
- grassland - grassland
- glacier - mangrove
- meadow
- forest
- village_green
- recreation_ground
- park
- garden
- wetland
- grassland
- bog
- swamp
- wet_meadow
- marsh - marsh
- meadow
- orchard
- park
- plant_nursery
- recreation_ground
- reedbed - reedbed
- saltern - saltern
- tidalflat
- saltmarsh - saltmarsh
- mangrove
- beach
- sand - sand
- scree
- swamp
- tidalflat
- village_green
- vineyard
- wet_meadow
- wetland
- wood
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, class, subclass FROM layer_landcover(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, class, subclass FROM layer_landcover(!bbox!, z(!scale_denominator!))) AS t

View File

@ -1,55 +1,55 @@
-- etldoc: ne_50m_urban_areas -> landuse_z4 -- etldoc: ne_50m_urban_areas -> landuse_z4
CREATE OR REPLACE VIEW landuse_z4 AS ( 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 FROM ne_50m_urban_areas
WHERE scalerank <= 2 WHERE scalerank <= 2
); );
-- etldoc: ne_50m_urban_areas -> landuse_z5 -- etldoc: ne_50m_urban_areas -> landuse_z5
CREATE OR REPLACE VIEW landuse_z5 AS ( 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 FROM ne_50m_urban_areas
); );
-- etldoc: ne_10m_urban_areas -> landuse_z6 -- etldoc: ne_10m_urban_areas -> landuse_z6
CREATE OR REPLACE VIEW landuse_z6 AS ( 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 FROM ne_10m_urban_areas
); );
-- etldoc: osm_landuse_polygon_gen5 -> landuse_z9 -- etldoc: osm_landuse_polygon_gen5 -> landuse_z9
CREATE OR REPLACE VIEW landuse_z9 AS ( 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 FROM osm_landuse_polygon_gen5
); );
-- etldoc: osm_landuse_polygon_gen4 -> landuse_z10 -- etldoc: osm_landuse_polygon_gen4 -> landuse_z10
CREATE OR REPLACE VIEW landuse_z10 AS ( 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 FROM osm_landuse_polygon_gen4
); );
-- etldoc: osm_landuse_polygon_gen3 -> landuse_z11 -- etldoc: osm_landuse_polygon_gen3 -> landuse_z11
CREATE OR REPLACE VIEW landuse_z11 AS ( 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 FROM osm_landuse_polygon_gen3
); );
-- etldoc: osm_landuse_polygon_gen2 -> landuse_z12 -- etldoc: osm_landuse_polygon_gen2 -> landuse_z12
CREATE OR REPLACE VIEW landuse_z12 AS ( 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 FROM osm_landuse_polygon_gen2
); );
-- etldoc: osm_landuse_polygon_gen1 -> landuse_z13 -- etldoc: osm_landuse_polygon_gen1 -> landuse_z13
CREATE OR REPLACE VIEW landuse_z13 AS ( 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 FROM osm_landuse_polygon_gen1
); );
-- etldoc: osm_landuse_polygon -> landuse_z14 -- etldoc: osm_landuse_polygon -> landuse_z14
CREATE OR REPLACE VIEW landuse_z14 AS ( 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 FROM osm_landuse_polygon
); );
@ -63,7 +63,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text) AS $$
NULLIF(landuse, ''), NULLIF(landuse, ''),
NULLIF(amenity, ''), NULLIF(amenity, ''),
NULLIF(leisure, ''), NULLIF(leisure, ''),
NULLIF(tourism, '') NULLIF(tourism, ''),
NULLIF(place, '')
) AS class ) AS class
FROM ( FROM (
-- etldoc: landuse_z4 -> layer_landuse:z4 -- etldoc: landuse_z4 -> layer_landuse:z4

View File

@ -9,17 +9,12 @@ layer:
description: | description: |
Use the **class** to assign special colors to areas. Use the **class** to assign special colors to areas.
Original value of either the 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), [`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: values:
- school
- university
- kindergarten
- college
- library
- hospital
- railway - railway
- cemetery - cemetery
- military - military
@ -27,12 +22,21 @@ layer:
- commercial - commercial
- industrial - industrial
- retail - retail
- bus_station
- school
- university
- kindergarten
- college
- library
- hospital
- stadium - stadium
- pitch - pitch
- playground - playground
- track
- theme_park - theme_park
- bus_station
- zoo - zoo
- suburb
- neighbourhood
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, class FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, class FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t

View File

@ -46,19 +46,14 @@ tables:
- name: tourism - name: tourism
key: tourism key: tourism
type: string type: string
- name: place
key: place
type: string
- name: area - name: area
type: area type: area
- name: webmerc_area - name: webmerc_area
type: webmerc_area type: webmerc_area
mapping: mapping:
amenity:
- bus_station
- school
- university
- kindergarten
- college
- library
- hospital
landuse: landuse:
- railway - railway
- cemetery - cemetery
@ -68,10 +63,22 @@ tables:
- commercial - commercial
- industrial - industrial
- retail - retail
amenity:
- bus_station
- school
- university
- kindergarten
- college
- library
- hospital
leisure: leisure:
- stadium - stadium
- pitch - pitch
- playground - playground
- track
tourism: tourism:
- theme_park - theme_park
- zoo - zoo
place:
- suburb
- neighbourhood

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -2,29 +2,52 @@
-- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink, -- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink,
-- etldoc: style="rounded,filled", label="layer_mountain_peak | <z7_> z7+" ] ; -- etldoc: style="rounded,filled", label="layer_mountain_peak | <z7_> z7+" ] ;
CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry, zoom_level integer, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_mountain_peak(
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 $$ 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_ -- 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 SELECT
FROM ( osm_id,
SELECT osm_id, geometry, name, geometry,
COALESCE(NULLIF(name_en, ''), name) AS name_en, name,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, name_en,
tags, name_de,
substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, tags -> 'natural' AS class,
round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, tags,
row_number() OVER ( ele::int,
PARTITION BY LabelGrid(geometry, 100 * pixel_width) ele_ft::int,
ORDER BY ( rank::int FROM (
substring(ele from E'^(-?\\d+)(\\D|$)')::int + SELECT osm_id, geometry, name,
(CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) + COALESCE(NULLIF(name_en, ''), name) AS name_en,
(CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END) COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
) DESC tags,
)::int AS "rank" substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele,
FROM osm_peak_point round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft,
WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+' row_number() OVER (
) AS ranked_peaks PARTITION BY LabelGrid(geometry, 100 * pixel_width)
WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14) ORDER BY (
ORDER BY "rank" ASC; 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; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -28,3 +28,4 @@ tables:
mapping: mapping:
natural: natural:
- peak - peak
- volcano

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -8,13 +8,19 @@ layer:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. 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_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`. 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: Elevation (`ele`) in meters.
ele_ft: Elevation (`ele`) in feets. ele_ft: Elevation (`ele`) in feets.
rank: Rank of the peak within one tile (starting at 1 that is the most important peak). rank: Rank of the peak within one tile (starting at 1 that is the most important peak).
datasource: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 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: schema:
- ./update_peak_point.sql - ./update_peak_point.sql
- ./layer.sql - ./layer.sql

View File

@ -44,7 +44,7 @@ RETURNS TEXT AS $$
WHEN subclass IN ('supermarket','deli','delicatessen','department_store','greengrocer','marketplace') THEN 'grocery' WHEN subclass IN ('supermarket','deli','delicatessen','department_store','greengrocer','marketplace') THEN 'grocery'
WHEN subclass IN ('books','library') THEN 'library' WHEN subclass IN ('books','library') THEN 'library'
WHEN subclass IN ('university','college') THEN 'college' 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 ('chocolate','confectionery') THEN 'ice_cream'
WHEN subclass IN ('post_box','post_office') THEN 'post' WHEN subclass IN ('post_box','post_office') THEN 'post'
WHEN subclass IN ('cafe') THEN 'cafe' WHEN subclass IN ('cafe') THEN 'cafe'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -12,6 +12,7 @@ def_poi_mapping_amenity: &poi_mapping_amenity
- bank - bank
- bar - bar
- bbq - bbq
- bicycle_parking
- bicycle_rental - bicycle_rental
- biergarten - biergarten
- bus_station - bus_station
@ -35,8 +36,10 @@ def_poi_mapping_amenity: &poi_mapping_amenity
- kindergarten - kindergarten
- library - library
- marketplace - marketplace
- motorcycle_parking
- nightclub - nightclub
- nursing_home - nursing_home
- parking
- pharmacy - pharmacy
- place_of_worship - place_of_worship
- police - police
@ -70,6 +73,10 @@ def_poi_mapping_barrier: &poi_mapping_barrier
- stile - stile
- toll_booth - 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 # highway values , see http://taginfo.openstreetmap.org/keys/highway#values
def_poi_mapping_highway: &poi_mapping_highway def_poi_mapping_highway: &poi_mapping_highway
- bus_stop - bus_stop
@ -86,6 +93,7 @@ def_poi_mapping_landuse: &poi_mapping_landuse
- brownfield - brownfield
- cemetery - cemetery
- reservoir - reservoir
- winter_sports
# leisure values , see http://taginfo.openstreetmap.org/keys/leisure#values # leisure values , see http://taginfo.openstreetmap.org/keys/leisure#values
def_poi_mapping_leisure: &poi_mapping_leisure 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 def_poi_mapping_waterway: &poi_mapping_waterway
- dock - 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: tables:
# etldoc: imposm3 -> osm_poi_point # etldoc: imposm3 -> osm_poi_point
poi_point: poi_point:
type: point type: point
fields: fields: *poi_fields
- name: osm_id mapping: *poi_mapping
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
# etldoc: imposm3 -> osm_poi_polygon # etldoc: imposm3 -> osm_poi_polygon
poi_polygon: poi_polygon:
type: polygon type: polygon
fields: fields: *poi_fields
- name: osm_id mapping: *poi_mapping
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -18,15 +18,21 @@ layer:
description: | description: |
Original value of either the Original value of either the
[`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity), [`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure), [`barrier`](http://wiki.openstreetmap.org/wiki/Key:barrier),
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse), [`historic`](http://wiki.openstreetmap.org/wiki/Key:historic),
[`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),
[`information`](http://wiki.openstreetmap.org/wiki/Key:information), [`information`](http://wiki.openstreetmap.org/wiki/Key:information),
[`religion`](http://wiki.openstreetmap.org/wiki/Key:religion) [`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
or [`shop`](http://wiki.openstreetmap.org/wiki/Key:shop) [`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. tag. Use this to do more precise styling.
rank: | rank: |
The POIs are ranked ascending according to their importance within a grid. The `rank` value shows the The POIs are ranked ascending according to their importance within a grid. The `rank` value shows the

View File

@ -42,3 +42,13 @@ CREATE OR REPLACE FUNCTION service_value(service TEXT) RETURNS TEXT AS $$
ELSE NULL ELSE NULL
END; END;
$$ LANGUAGE SQL IMMUTABLE STRICT; $$ 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;

View File

@ -8,7 +8,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text, RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text,
ramp int, oneway int, brunnel TEXT, service TEXT, layer INT, level INT, 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 SELECT
osm_id, geometry, osm_id, geometry,
CASE CASE
@ -37,7 +37,8 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
NULLIF(bicycle, '') AS bicycle, NULLIF(bicycle, '') AS bicycle,
NULLIF(foot, '') AS foot, NULLIF(foot, '') AS foot,
NULLIF(horse, '') AS horse, NULLIF(horse, '') AS horse,
NULLIF(mtb_scale, '') AS mtb_scale NULLIF(mtb_scale, '') AS mtb_scale,
NULLIF(surface, '') AS surface
FROM ( FROM (
-- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4 -- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4
SELECT 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
NULL AS surface,
z_order z_order
FROM osm_transportation_merge_linestring_gen7 FROM osm_transportation_merge_linestring_gen7
WHERE zoom_level = 4 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_transportation_merge_linestring_gen6 FROM osm_transportation_merge_linestring_gen6
WHERE zoom_level = 5 WHERE zoom_level = 5
UNION ALL 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_transportation_merge_linestring_gen5 FROM osm_transportation_merge_linestring_gen5
WHERE zoom_level = 6 WHERE zoom_level = 6
UNION ALL 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_transportation_merge_linestring_gen4 FROM osm_transportation_merge_linestring_gen4
WHERE zoom_level = 7 WHERE zoom_level = 7
UNION ALL 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_transportation_merge_linestring_gen3 FROM osm_transportation_merge_linestring_gen3
WHERE zoom_level = 8 WHERE zoom_level = 8
UNION ALL 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, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
bicycle, foot, horse, mtb_scale, bicycle, foot, horse, mtb_scale,
z_order NULL AS surface, z_order
FROM osm_highway_linestring_gen2 FROM osm_highway_linestring_gen2
WHERE zoom_level BETWEEN 9 AND 10 WHERE zoom_level BETWEEN 9 AND 10
AND st_length(geometry)>zres(11) 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, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
bicycle, foot, horse, mtb_scale, bicycle, foot, horse, mtb_scale,
z_order NULL AS surface, z_order
FROM osm_highway_linestring_gen1 FROM osm_highway_linestring_gen1
WHERE zoom_level = 11 WHERE zoom_level = 11
AND st_length(geometry)>zres(12) 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 ELSE NULL::boolean
END AS indoor, END AS indoor,
bicycle, foot, horse, mtb_scale, bicycle, foot, horse, mtb_scale,
surface_value(surface) AS "surface",
z_order z_order
FROM osm_highway_linestring FROM osm_highway_linestring
WHERE NOT is_area AND ( 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::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::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 bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL as surface, z_order
FROM osm_railway_linestring_gen5 FROM osm_railway_linestring_gen5
WHERE zoom_level = 8 WHERE zoom_level = 8
AND railway='rail' AND service = '' and usage='main' 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, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_railway_linestring_gen4
WHERE zoom_level = 9 WHERE zoom_level = 9
AND railway='rail' AND service = '' and usage='main' 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_railway_linestring_gen3
WHERE zoom_level = 10 WHERE zoom_level = 10
AND railway IN ('rail', 'narrow_gauge') AND service = '' 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_railway_linestring_gen2
WHERE zoom_level = 11 WHERE zoom_level = 11
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_railway_linestring_gen1
WHERE zoom_level = 12 WHERE zoom_level = 12
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL as surface, z_order
FROM osm_railway_linestring FROM osm_railway_linestring
WHERE zoom_level = 13 WHERE zoom_level = 13
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = '' 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_aerialway_linestring_gen1
WHERE zoom_level = 12 WHERE zoom_level = 12
UNION ALL 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_aerialway_linestring FROM osm_aerialway_linestring
WHERE zoom_level >= 13 WHERE zoom_level >= 13
UNION ALL 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, 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 FROM osm_shipway_linestring_gen2
WHERE zoom_level = 11 WHERE zoom_level = 11
UNION ALL 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, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order z_order
NULL AS surface, z_order
FROM osm_shipway_linestring_gen1 FROM osm_shipway_linestring_gen1
WHERE zoom_level = 12 WHERE zoom_level = 12
UNION ALL 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, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_shipway_linestring FROM osm_shipway_linestring
WHERE zoom_level >= 13 WHERE zoom_level >= 13
UNION ALL 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, FALSE AS is_ramp, FALSE::int AS is_oneway, man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
z_order NULL AS surface, z_order
FROM osm_highway_polygon FROM osm_highway_polygon
-- We do not want underground pedestrian areas for now -- We do not want underground pedestrian areas for now
WHERE zoom_level >= 13 WHERE zoom_level >= 13

View File

@ -148,6 +148,9 @@ horse_field: &horse
mtb_scale_field: &mtb_scale mtb_scale_field: &mtb_scale
key: mtb:scale key: mtb:scale
name: mtb_scale name: mtb_scale
surface_field: &surface
key: surface
name: surface
type: string type: string
tables: tables:
@ -188,6 +191,7 @@ tables:
- *foot - *foot
- *horse - *horse
- *mtb_scale - *mtb_scale
- *surface
mapping: mapping:
highway: highway:
- motorway - motorway
@ -291,6 +295,7 @@ tables:
mapping: mapping:
aerialway: aerialway:
- cable_car - cable_car
- gondola
# etldoc: imposm3 -> osm_shipway_linestring # etldoc: imposm3 -> osm_shipway_linestring
shipway_linestring: shipway_linestring:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 117 KiB

View File

@ -36,6 +36,7 @@ layer:
- rail - rail
- transit - transit
- cable_car - cable_car
- gondola
- ferry - ferry
- bridge - bridge
- pier - pier
@ -117,10 +118,16 @@ layer:
mtb_scale: mtb_scale:
description: | description: |
Original value of the [`mtb:scale`](http://wiki.openstreetmap.org/wiki/Key:mtb:scale) tag (highways only). 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: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 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: schema:
- ./class.sql - ./class.sql
- ./update_transportation_merge.sql - ./update_transportation_merge.sql

View File

@ -69,6 +69,9 @@ tables:
- name: waterway - name: waterway
key: waterway key: waterway
type: string type: string
- name: is_intermittent
key: intermittent
type: bool
filters: filters:
reject: reject:
covered: ["yes"] covered: ["yes"]

View File

@ -1,6 +1,7 @@
CREATE OR REPLACE FUNCTION water_class(waterway TEXT) RETURNS TEXT AS $$ CREATE OR REPLACE FUNCTION water_class(waterway TEXT) RETURNS TEXT AS $$
SELECT CASE SELECT CASE
WHEN waterway='' THEN 'lake' WHEN waterway='' THEN 'lake'
WHEN waterway='lake' THEN 'lake'
WHEN waterway='dock' THEN 'dock' WHEN waterway='dock' THEN 'dock'
ELSE 'river' ELSE 'river'
END; END;
@ -10,122 +11,131 @@ $$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE VIEW water_z0 AS ( CREATE OR REPLACE VIEW water_z0 AS (
-- etldoc: ne_110m_ocean -> water_z0 -- 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 UNION ALL
-- etldoc: ne_110m_lakes -> water_z0 -- 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 ( CREATE OR REPLACE VIEW water_z1 AS (
-- etldoc: ne_110m_ocean -> water_z1 -- 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 UNION ALL
-- etldoc: ne_110m_lakes -> water_z1 -- 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 ( CREATE OR REPLACE VIEW water_z2 AS (
-- etldoc: ne_50m_ocean -> water_z2 -- 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 UNION ALL
-- etldoc: ne_50m_lakes -> water_z2 -- 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 ( CREATE OR REPLACE VIEW water_z4 AS (
-- etldoc: ne_50m_ocean -> water_z4 -- 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 UNION ALL
-- etldoc: ne_50m_lakes -> water_z4 -- 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 ( CREATE OR REPLACE VIEW water_z5 AS (
-- etldoc: ne_10m_ocean -> water_z5 -- 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 UNION ALL
-- etldoc: ne_10m_lakes -> water_z5 -- 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 ( CREATE OR REPLACE VIEW water_z6 AS (
-- etldoc: ne_10m_ocean -> water_z6 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen6 -> water_z6 -- 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 ( CREATE OR REPLACE VIEW water_z7 AS (
-- etldoc: ne_10m_ocean -> water_z7 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen5 -> water_z7 -- 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 ( CREATE OR REPLACE VIEW water_z8 AS (
-- etldoc: osm_ocean_polygon_gen4 -> water_z8 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen4 -> water_z8 -- 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 ( CREATE OR REPLACE VIEW water_z9 AS (
-- etldoc: osm_ocean_polygon_gen3 -> water_z9 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen3 -> water_z9 -- 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 ( CREATE OR REPLACE VIEW water_z10 AS (
-- etldoc: osm_ocean_polygon_gen2 -> water_z10 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen2 -> water_z10 -- 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 ( CREATE OR REPLACE VIEW water_z11 AS (
-- etldoc: osm_ocean_polygon_gen1 -> water_z11 -- 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 UNION ALL
-- etldoc: osm_water_polygon_gen1 -> water_z11 -- 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 ( CREATE OR REPLACE VIEW water_z12 AS (
-- etldoc: osm_ocean_polygon_gen1 -> water_z12 -- 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 UNION ALL
-- etldoc: osm_water_polygon -> water_z12 -- 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 ( CREATE OR REPLACE VIEW water_z13 AS (
-- etldoc: osm_ocean_polygon -> water_z13 -- 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 UNION ALL
-- etldoc: osm_water_polygon -> water_z13 -- 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 ( CREATE OR REPLACE VIEW water_z14 AS (
-- etldoc: osm_ocean_polygon -> water_z14 -- 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 UNION ALL
-- etldoc: osm_water_polygon -> water_z14 -- 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: layer_water [shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_water |<z0> z0|<z1>z1|<z2>z2|<z3>z3 |<z4> z4|<z5>z5|<z6>z6|<z7>z7| <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ; -- etldoc: label="layer_water |<z0> z0|<z1>z1|<z2>z2|<z3>z3 |<z4> z4|<z5>z5|<z6>z6|<z7>z7| <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int)
RETURNS TABLE(geometry geometry, class text) AS $$ RETURNS TABLE(geometry geometry, class text, intermittent int) AS $$
SELECT geometry, class::text FROM ( SELECT geometry, class::text, is_intermittent::int AS intermittent FROM (
-- etldoc: water_z0 -> layer_water:z0 -- etldoc: water_z0 -> layer_water:z0
SELECT * FROM water_z0 WHERE zoom_level = 0 SELECT * FROM water_z0 WHERE zoom_level = 0
UNION ALL UNION ALL

View File

@ -4,22 +4,26 @@ layer:
Water polygons representing oceans and lakes. Covered watered areas are excluded (`covered=yes`). 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 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. 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. 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 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. able to use border styling for ocean water features.
fields: fields:
class: class:
description: | 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. Water bodies are classified as `lake` or `river` for water bodies with the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag.
values: values:
- ocean - ocean
- lake - lake
- river - 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 buffer_size: 4
datasource: 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: schema:
- ./water.sql - ./water.sql
datasources: datasources:

View File

@ -3,7 +3,7 @@
-- etldoc: label="layer_water_name | <z0_8> z0_8 | <z9_13> z9_13 | <z14_> z14+" ] ; -- etldoc: label="layer_water_name | <z0_8> z0_8 | <z9_13> z9_13 | <z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_water_name(bbox geometry, zoom_level integer) 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:z9_13
-- etldoc: osm_water_lakeline -> layer_water_name:z14_ -- etldoc: osm_water_lakeline -> layer_water_name:z14_
SELECT 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_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
tags, tags,
'lake'::text AS class 'lake'::text AS class,
is_intermittent::int AS intermittent
FROM osm_water_lakeline FROM osm_water_lakeline
WHERE geometry && bbox WHERE geometry && bbox
AND ((zoom_level BETWEEN 9 AND 13 AND LineLabel(zoom_level, NULLIF(name, ''), geometry)) 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_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
tags, tags,
'lake'::text AS class 'lake'::text AS class,
is_intermittent::int AS intermittent
FROM osm_water_point FROM osm_water_point
WHERE geometry && bbox AND ( WHERE geometry && bbox AND (
(zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level)) (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_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
tags, tags,
place::text AS class place::text AS class,
is_intermittent::int AS intermittent
FROM osm_marine_point FROM osm_marine_point
WHERE geometry && bbox AND ( WHERE geometry && bbox AND (
place = 'ocean' place = 'ocean'

View File

@ -24,6 +24,9 @@ tables:
- name: rank - name: rank
key: rank key: rank
type: integer type: integer
- name: is_intermittent
key: intermittent
type: bool
filters: filters:
require: require:
name: ["__any__"] name: ["__any__"]

View File

@ -12,7 +12,7 @@ BEGIN
-- etldoc: osm_marine_point -> osm_marine_point -- etldoc: osm_marine_point -> osm_marine_point
WITH important_marine_point AS ( 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 FROM ne_10m_geography_marine_polys AS ne, osm_marine_point AS osm
WHERE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.name WHERE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.name
OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:en' OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:en'

View File

@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS (
ll.wkb_geometry AS geometry, ll.wkb_geometry AS geometry,
name, name_en, name_de, name, name_en, name_de,
update_tags(tags, ll.wkb_geometry) AS tags, 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 FROM osm_water_polygon AS wp
INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
WHERE wp.name <> '' AND ST_IsValid(wp.geometry) WHERE wp.name <> '' AND ST_IsValid(wp.geometry)

View File

@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_point AS (
wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry, wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry,
wp.name, wp.name_en, wp.name_de, wp.name, wp.name_en, wp.name_de,
update_tags(wp.tags, ST_PointOnSurface(wp.geometry)) AS tags, 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 FROM osm_water_polygon AS wp
LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
WHERE ll.osm_id IS NULL AND wp.name <> '' WHERE ll.osm_id IS NULL AND wp.name <> ''

View File

@ -13,6 +13,10 @@ layer:
At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*. At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*.
values: values:
- lake - 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 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 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: datasource:
@ -20,7 +24,7 @@ layer:
key_field: osm_id key_field: osm_id
key_field_as_attribute: no key_field_as_attribute: no
srid: 900913 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: schema:
- ./update_marine_point.sql - ./update_marine_point.sql
- ./update_water_lakeline.sql - ./update_water_lakeline.sql

View File

@ -49,6 +49,9 @@ tables:
type: hstore_tags type: hstore_tags
- *tunnel - *tunnel
- *bridge - *bridge
- name: is_intermittent
key: intermittent
type: bool
mapping: mapping:
waterway: waterway:
- stream - stream

View File

@ -8,60 +8,60 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
-- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3 -- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3
CREATE OR REPLACE VIEW waterway_z3 AS ( 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 FROM ne_110m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4 -- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4
CREATE OR REPLACE VIEW waterway_z4 AS ( 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 FROM ne_50m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6 -- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6
CREATE OR REPLACE VIEW waterway_z6 AS ( 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 FROM ne_10m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9 -- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9
CREATE OR REPLACE VIEW waterway_z9 AS ( 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 FROM osm_important_waterway_linestring_gen3
); );
-- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10 -- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10
CREATE OR REPLACE VIEW waterway_z10 AS ( 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 FROM osm_important_waterway_linestring_gen2
); );
-- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11 -- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11
CREATE OR REPLACE VIEW waterway_z11 AS ( 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 FROM osm_important_waterway_linestring_gen1
); );
-- etldoc: osm_waterway_linestring -> waterway_z12 -- etldoc: osm_waterway_linestring -> waterway_z12
CREATE OR REPLACE VIEW waterway_z12 AS ( 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 FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal') WHERE waterway IN ('river', 'canal')
); );
-- etldoc: osm_waterway_linestring -> waterway_z13 -- etldoc: osm_waterway_linestring -> waterway_z13
CREATE OR REPLACE VIEW waterway_z13 AS ( 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 FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch')
); );
-- etldoc: osm_waterway_linestring -> waterway_z14 -- etldoc: osm_waterway_linestring -> waterway_z14
CREATE OR REPLACE VIEW waterway_z14 AS ( 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 FROM osm_waterway_linestring
); );
@ -69,12 +69,13 @@ CREATE OR REPLACE VIEW waterway_z14 AS (
-- etldoc: label="layer_waterway | <z3> z3 |<z4_5> z4-z5 |<z6_8> z6-8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14> z14+" ]; -- etldoc: label="layer_waterway | <z3> z3 |<z4_5> z4-z5 |<z6_8> z6-8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14> z14+" ];
CREATE OR REPLACE FUNCTION layer_waterway(bbox geometry, zoom_level int) 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, SELECT geometry, class,
NULLIF(name, '') AS name, NULLIF(name, '') AS name,
COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
waterway_brunnel(is_bridge, is_tunnel) AS brunnel, waterway_brunnel(is_bridge, is_tunnel) AS brunnel,
is_intermittent::int AS intermittent,
tags tags
FROM ( FROM (
-- etldoc: waterway_z3 -> layer_waterway:z3 -- etldoc: waterway_z3 -> layer_waterway:z3

View File

@ -1,7 +1,7 @@
layer: layer:
id: "waterway" id: "waterway"
description: | 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. and Natural Earth rivers and lake centerlines for low zoom levels.
Linestrings without a name or which are too short are filtered Linestrings without a name or which are too short are filtered
out at low zoom levels. Waterways do no not have a `subclass` field. out at low zoom levels. Waterways do no not have a `subclass` field.
@ -27,9 +27,13 @@ layer:
values: values:
- bridge - bridge
- tunnel - tunnel
intermittent:
description: |
Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) waterway.
values: [0, 1]
datasource: datasource:
geometry_field: geometry 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: schema:
- ./update_waterway_linestring.sql - ./update_waterway_linestring.sql
- ./update_important_waterway.sql - ./update_important_waterway.sql

View File

@ -17,7 +17,7 @@ tileset:
- layers/poi/poi.yaml - layers/poi/poi.yaml
- layers/aerodrome_label/aerodrome_label.yaml - layers/aerodrome_label/aerodrome_label.yaml
name: OpenMapTiles name: OpenMapTiles
version: 3.9.0 version: 3.10.0
id: openmaptiles id: openmaptiles
description: "A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org" description: "A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org"
attribution: '<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>' attribution: '<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>'
@ -34,6 +34,7 @@ tileset:
- br # Breton, Latin - br # Breton, Latin
- bs # Bosnian, Latin - bs # Bosnian, Latin
- ca # Catalan, Latin - ca # Catalan, Latin
- co # Corsican, Latin
- cs # Czech, Latin - cs # Czech, Latin
- cy # Welsh, Latin - cy # Welsh, Latin
- da # Danish, Latin - da # Danish, Latin
@ -43,6 +44,7 @@ tileset:
- eo # Esperanto, Latin - eo # Esperanto, Latin
- es # Spanish, Latin - es # Spanish, Latin
- et # Estonian, Latin - et # Estonian, Latin
- eu # Basque, Latin
- fi # Finnish, Latin - fi # Finnish, Latin
- fr # French, Latin - fr # French, Latin
- fy # Western Frisian, Latin - fy # Western Frisian, Latin
@ -52,6 +54,7 @@ tileset:
- hr # Croatian, Latin - hr # Croatian, Latin
- hu # Hungarian, Latin - hu # Hungarian, Latin
- hy # Armenian - hy # Armenian
- id # Indonesian, Latin
- is # Icelandic, Latin - is # Icelandic, Latin
- it # Italian, Latin - it # Italian, Latin
- ja # Japanese - ja # Japanese
@ -71,6 +74,7 @@ tileset:
- ml # Malayalam - ml # Malayalam
- nl # Dutch, Latin - nl # Dutch, Latin
- "no" # Norwegian, Latin - "no" # Norwegian, Latin
- oc # Occitan (post 1500), Latin
- pl # Polish, Latin - pl # Polish, Latin
- pt # Portuguese, Latin - pt # Portuguese, Latin
- rm # Romansh, Latin - rm # Romansh, Latin

View File

@ -11,9 +11,9 @@ echo "# FREQ - $layerid group by : $classvars "
for z in {0..15} for z in {0..15}
do do
echo " " 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 SQLCODE=$(cat <<-END
select $classvars , count(*) as _count_ from select $classvars , count(*) as _count_ from
@ -29,7 +29,7 @@ END
#echo "\`\`\`" #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" \ 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 done

View File

@ -13,17 +13,17 @@ do
echo " " echo " "
echo "## $layerid z$z - $var " 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 SQLCODE=$(cat <<-END
SELECT SELECT
count($var) as count count($var) as count
,min($var) as min ,min($var) as min
,max($var) as max ,max($var) as max
,avg($var) as avg ,avg($var) as avg
,stddev($var) as stddev ,stddev($var) as stddev
,variance($var) as variance ,variance($var) as variance
FROM FROM
( $SQL ) as t ( $SQL ) as t
; ;
END END
@ -35,6 +35,6 @@ END
#echo "\`\`\`" #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" \ 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 done

View File

@ -11,7 +11,7 @@ do
echo " " echo " "
echo "## $layerid z$z max length ($classvar)" 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 SQLCODE=$(cat <<-END
SELECT DISTINCT $classvar , length( $classvar ) AS _length_ from SELECT DISTINCT $classvar , length( $classvar ) AS _length_ from

View File

@ -7,7 +7,7 @@ set -o nounset
# or make generate-qareports # or make generate-qareports
# ---- freq --------------------------------------------------------------- # ---- freq ---------------------------------------------------------------
mkdir -p ./build/qareports mkdir -p ./build/qareports
rm -f ./build/qareports/*.md 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 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 "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 "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 "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 "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 "subclass " > ./build/qareports/freq_poi__subclass.md
./qa/layer_freq.sh poi "rank " > ./build/qareports/freq_poi__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 " > ./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,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 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 "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 "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 " > ./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 transportation_name "ref_length" > ./build/qareports/freq_transportation_name__ref_length.md
./qa/layer_freq.sh water "class " > ./build/qareports/freq_water__class.md ./qa/layer_freq.sh water "class " > ./build/qareports/freq_water__class.md
@ -56,22 +56,22 @@ rm -f ./build/qareports/*.md
# ---- toplength ------------------------------------------- # ---- 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" > ./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_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" > ./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_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 "name" > ./build/qareports/toplength_transportation_name__name.md
./qa/layer_toplength.sh transportation_name "ref" > ./build/qareports/toplength_transportation_name__ref.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 ###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" > ./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_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 ------------------------------------- # ---- numvar analyze -------------------------------------

View File

@ -167,21 +167,21 @@ fi
echo " " echo " "
echo "-------------------------------------------------------------------------------------" echo "-------------------------------------------------------------------------------------"
echo "====> : Remove old generated source files ( ./build/* ) ( if they exist ) " echo "====> : Remove old generated source files ( ./build/* ) ( if they exist ) "
docker-compose run --rm openmaptiles-tools make clean make clean
echo " " echo " "
echo "-------------------------------------------------------------------------------------" echo "-------------------------------------------------------------------------------------"
echo "====> : Code generating from the layer definitions ( ./build/mapping.yaml; ./build/tileset.sql )" 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 " : 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! " 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 "-------------------------------------------------------------------------------------" echo "-------------------------------------------------------------------------------------"
echo "====> : Start PostgreSQL service ; create PostgreSQL data volume " echo "====> : Start PostgreSQL service ; create PostgreSQL data volume "
echo " : Source code: https://github.com/openmaptiles/postgis " echo " : Source code: https://github.com/openmaptiles/postgis "
echo " : Thank you: https://www.postgresql.org ! Thank you http://postgis.org !" echo " : Thank you: https://www.postgresql.org ! Thank you http://postgis.org !"
docker-compose up -d postgres docker-compose up -d postgres
echo " " echo " "
echo "-------------------------------------------------------------------------------------" echo "-------------------------------------------------------------------------------------"
@ -192,10 +192,10 @@ make forced-clean-sql
echo " " echo " "
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 " : Source code: https://github.com/openmaptiles/import-water "
echo " : Data license: http://openstreetmapdata.com/info/license " echo " : Data license: https://osmdata.openstreetmap.de/info/license.html "
echo " : Thank you: http://openstreetmapdata.com/info/supporting " echo " : Thank you: https://osmdata.openstreetmap.de/info/ "
docker-compose run --rm import-water docker-compose run --rm import-water
echo " " echo " "