Merge branch 'master' into feature/changed-place-layer

Conflicts:
	layers/place/mapping.yaml
This commit is contained in:
Lukas Martinelli 2016-12-01 09:57:58 +00:00
commit 3fd28778cc
53 changed files with 674 additions and 570 deletions

View File

@ -1,8 +1,5 @@
all: build/openmaptiles.tm2source/data.yml build/mapping.yaml build/tileset.sql all: build/openmaptiles.tm2source/data.yml build/mapping.yaml build/tileset.sql
.PHONY: docs
docs: layers/railway/README.md layers/boundary/README.md layers/water/README.md layers/building/README.md layers/highway/README.md layers/highway_name/README.md layers/poi/README.md layers/place/README.md layers/waterway/README.md layers/water_name/README.md layers/landcover/README.md layers/landuse/README.md layers/housenumber/README.md
build/openmaptiles.tm2source/data.yml: build/openmaptiles.tm2source/data.yml:
mkdir -p build/openmaptiles.tm2source && generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > build/openmaptiles.tm2source/data.yml mkdir -p build/openmaptiles.tm2source && generate-tm2source openmaptiles.yaml --host="postgres" --port=5432 --database="openmaptiles" --user="openmaptiles" --password="openmaptiles" > build/openmaptiles.tm2source/data.yml
@ -12,44 +9,5 @@ build/mapping.yaml:
build/tileset.sql: build/tileset.sql:
mkdir -p build && generate-sql openmaptiles.yaml > build/tileset.sql mkdir -p build && generate-sql openmaptiles.yaml > build/tileset.sql
layers/poi/README.md:
generate-doc layers/poi/poi.yaml --diagram layers/poi/mapping > layers/poi/README.md
layers/highway/README.md:
generate-doc layers/highway/highway.yaml --diagram layers/highway/mapping > layers/highway/README.md
layers/highway_name/README.md:
generate-doc layers/highway_name/highway_name.yaml > layers/highway_name/README.md
layers/railway/README.md:
generate-doc layers/railway/railway.yaml --diagram layers/railway/mapping > layers/railway/README.md
layers/boundary/README.md:
generate-doc layers/boundary/boundary.yaml --diagram layers/boundary/mapping > layers/boundary/README.md
layers/water_name/README.md:
generate-doc layers/water_name/water_name.yaml > layers/water_name/README.md
layers/water/README.md:
generate-doc layers/water/water.yaml --diagram layers/water/mapping > layers/water/README.md
layers/waterway/README.md:
generate-doc layers/waterway/waterway.yaml --diagram layers/waterway/mapping > layers/waterway/README.md
layers/building/README.md:
generate-doc layers/building/building.yaml > layers/building/README.md
layers/place/README.md:
generate-doc layers/place/place.yaml --diagram layers/place/mapping > layers/place/README.md
layers/landuse/README.md:
generate-doc layers/landuse/landuse.yaml --diagram layers/landuse/mapping > layers/landuse/README.md
layers/landcover/README.md:
generate-doc layers/landcover/landcover.yaml --diagram layers/landcover/mapping > layers/landcover/README.md
layers/housenumber/README.md:
generate-doc layers/housenumber/housenumber.yaml > layers/housenumber/README.md
clean: clean:
rm -f build/openmaptiles.tm2source/data.yml && rm -f build/mapping.yaml && rm -f build/tileset.sql && rm -f layers/**/README.md&& rm -f layers/**/*.png rm -f build/openmaptiles.tm2source/data.yml && rm -f build/mapping.yaml && rm -f build/tileset.sql

View File

@ -1,11 +1,18 @@
## OpenMapTiles ## OpenMapTiles
OpenMapTiles is a collection of vector tile layers you can mix and match to create your own vector tile sets OpenMapTiles is an extensible vector tile schema you can use or mix and match to create your own vector tile sets.
It is used by [OSM2VectorTiles](http://osm2vectortiles.org/) and we encourage you to collaborate, reuse and adapt existing layers It is used by [OSM2VectorTiles](http://osm2vectortiles.org/) and we encourage you to collaborate, reuse and adapt existing layers and add your own layers.
and add your own layers.
You define a self contained **Layer** together with SQL files and layer and data source definitions (like a imposm3 mapping file) You define a self contained **Layer** together with SQL files and layer and data source definitions (like an imposm3 mapping file) that you can then reference in a **Tileset** where you mix and match with other layers.
that you can then reference in a **Tileset** where you mix and match with other layers.
## Styles
You can start from several styles supporting the OpenMapTiles vector schema.
- [OSM Bright](https://github.com/openmaptiles/osm-bright-gl-style)
- [Positron](https://github.com/openmaptiles/positron-gl-style)
- [Dark Matter](https://github.com/openmaptiles/dark-matter-gl-style)
- [Klokantech Basic](https://github.com/openmaptiles/klokantech-basic-gl-style)
## Layers ## Layers
@ -17,19 +24,19 @@ We welcome new standard layers from other data sources or import tools (like osm
Each layer is documented and self contained. Click on the link for each layer to get more information. Each layer is documented and self contained. Click on the link for each layer to get more information.
Layers can be chosen to create a **Tileset** like the `openmaptiles.yaml` tileset. Layers can be chosen to create a **Tileset** like the `openmaptiles.yaml` tileset.
- [boundary](layers/boundary/README.md) - [boundary](https://github.com/openmaptiles/openmaptiles/wiki/boundary)
- [building](layers/building/README.md) - [building](https://github.com/openmaptiles/openmaptiles/wiki/building)
- [highway](layers/highway/README.md) - [transportation](https://github.com/openmaptiles/openmaptiles/wiki/transportation)
- [highway_name](layers/highway_name/README.md) - [transportation_name](https://github.com/openmaptiles/openmaptiles/wiki/transportation_name)
- [housenumber](layers/housenumber/README.md) - [housenumber](https://github.com/openmaptiles/openmaptiles/wiki/housenumber)
- [landcover](layers/landcover/README.md) - [landcover](https://github.com/openmaptiles/openmaptiles/wiki/landcover)
- [landuse](layers/landuse/README.md) - [landuse](https://github.com/openmaptiles/openmaptiles/wiki/landuse)
- [place](layers/place/README.md) - [place](https://github.com/openmaptiles/openmaptiles/wiki/place)
- [poi](layers/poi/README.md) - [poi](https://github.com/openmaptiles/openmaptiles/wiki/poi)
- [railway](layers/railway/README.md) - [park](https://github.com/openmaptiles/openmaptiles/wiki/park)
- [water](layers/water/README.md) - [water](https://github.com/openmaptiles/openmaptiles/wiki/water)
- [water_name](layers/water_name/README.md) - [water_name](https://github.com/openmaptiles/openmaptiles/wiki/water_name)
- [waterway](layers/waterway/README.md) - [waterway](https://github.com/openmaptiles/openmaptiles/wiki/waterway)
### Define your own Layer ### Define your own Layer

View File

@ -1,24 +1,26 @@
version: "2" version: "2"
volumes:
pgdata:
services: services:
postgres: postgres:
image: "openmaptiles/postgis:2.2" image: "openmaptiles/postgis:2.2"
volumes: volumes:
- ./pgdata:/var/lib/postgresql/data - pgdata:/var/lib/postgresql/data
ports: ports:
- "5432" - "5432"
env_file: .env env_file: .env
import-natural-earth: import-natural-earth:
image: "openmaptiles/import-natural-earth" image: "openmaptiles/import-natural-earth:1.0"
env_file: .env env_file: .env
links: links:
- postgres - postgres
import-water: import-water:
image: "openmaptiles/import-water" image: "openmaptiles/import-water:0.2"
env_file: .env env_file: .env
links: links:
- postgres - postgres
import-lakelines: import-lakelines:
image: "openmaptiles/import-lakelines" image: "openmaptiles/import-lakelines:0.9"
env_file: .env env_file: .env
links: links:
- postgres - postgres

View File

@ -1,19 +0,0 @@
# boundary
Contains administrative boundaries as linestrings (no maritime boundaries yet) as linestrings.
Until z7 [Natural Earth data](http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/)
is used after which OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative)) are present from z8 to z14.
OSM data contains all [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level)
but for most styles it makes sense to just style `admin_level=2` and `admin_level=4`.
## Fields
- **admin_level**: OSM [admin_level](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level)
indicating the level of importance of this boundary.
At low zoom levels the Natural Earth boundaries are mapped to the equivalent admin levels.
## Mapping
![](mapping.png)

View File

@ -56,6 +56,18 @@ CREATE OR REPLACE VIEW boundary_z5 AS (
WHERE scalerank <= 7 AND featurecla = 'Adm-1 boundary' WHERE scalerank <= 7 AND featurecla = 'Adm-1 boundary'
); );
-- etldoc: ne_10m_admin_0_boundary_lines_land -> boundary_z6
-- etldoc: ne_10m_admin_1_states_provinces_lines_shp -> boundary_z6
CREATE OR REPLACE VIEW boundary_z6 AS (
SELECT geom, 2 AS admin_level
FROM ne_10m_admin_0_boundary_lines_land
UNION ALL
SELECT geom, 4 AS admin_level
FROM ne_10m_admin_1_states_provinces_lines_shp
WHERE scalerank <= 9 AND featurecla = 'Adm-1 boundary'
);
-- etldoc: ne_10m_admin_0_boundary_lines_land -> boundary_z7 -- etldoc: ne_10m_admin_0_boundary_lines_land -> boundary_z7
-- etldoc: ne_10m_admin_1_states_provinces_lines_shp -> boundary_z7 -- etldoc: ne_10m_admin_1_states_provinces_lines_shp -> boundary_z7
CREATE OR REPLACE VIEW boundary_z7 AS ( CREATE OR REPLACE VIEW boundary_z7 AS (
@ -102,8 +114,8 @@ CREATE OR REPLACE VIEW boundary_z12 AS (
FROM osm_boundary_linestring_gen1 FROM osm_boundary_linestring_gen1
); );
-- etldoc: layer_boundary[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_boundary[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="<sql> layer_boundary |<z0> z0 |<z1_2> z1_2 | <z3> z3 | <z4> z4 |<z5_6> z5_6 | <z7> z7 | <z8> z8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13_> z13_ " ] -- etldoc: label="<sql> layer_boundary |<z0> z0 |<z1_2> z1_2 | <z3> z3 | <z4> z4 | <z5> z5 || <z6> z6 || <z7> z7 | <z8> z8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13+"]
CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int)
RETURNS TABLE(geometry geometry, admin_level int) AS $$ RETURNS TABLE(geometry geometry, admin_level int) AS $$
@ -120,8 +132,11 @@ RETURNS TABLE(geometry geometry, admin_level int) AS $$
-- etldoc: boundary_z4 -> layer_boundary:z4 -- etldoc: boundary_z4 -> layer_boundary:z4
SELECT * FROM boundary_z4 WHERE geom && bbox AND zoom_level = 4 SELECT * FROM boundary_z4 WHERE geom && bbox AND zoom_level = 4
UNION ALL UNION ALL
-- etldoc: boundary_z5 -> layer_boundary:z5_6 -- etldoc: boundary_z5 -> layer_boundary:z5
SELECT * FROM boundary_z5 WHERE geom && bbox AND zoom_level BETWEEN 5 AND 6 SELECT * FROM boundary_z5 WHERE geom && bbox AND zoom_level = 5
UNION ALL
-- etldoc: boundary_z6 -> layer_boundary:z6
SELECT * FROM boundary_z6 WHERE geom && bbox AND zoom_level = 6
UNION ALL UNION ALL
-- etldoc: boundary_z7 -> layer_boundary:z7 -- etldoc: boundary_z7 -> layer_boundary:z7
SELECT * FROM boundary_z7 WHERE geom && bbox AND zoom_level = 7 SELECT * FROM boundary_z7 WHERE geom && bbox AND zoom_level = 7
@ -141,7 +156,7 @@ RETURNS TABLE(geometry geometry, admin_level int) AS $$
-- etldoc: boundary_z12 -> layer_boundary:z12 -- etldoc: boundary_z12 -> layer_boundary:z12
SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level = 12 SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level = 12
UNION ALL UNION ALL
-- etldoc: boundary_z12 -> layer_boundary:z13_ -- etldoc: boundary_z12 -> layer_boundary:z13
SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level >= 13 SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level >= 13
) AS zoom_levels; ) AS zoom_levels;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -3,27 +3,27 @@ generalized_tables:
# etldoc: imposm3 -> osm_boundary_linestring_gen5 # etldoc: imposm3 -> osm_boundary_linestring_gen5
boundary_linestring_gen5: boundary_linestring_gen5:
source: boundary_linestring source: boundary_linestring
tolerance: 420.0 tolerance: 480.0
# etldoc: imposm3 -> osm_boundary_linestring_gen4 # etldoc: imposm3 -> osm_boundary_linestring_gen4
boundary_linestring_gen4: boundary_linestring_gen4:
source: boundary_linestring source: boundary_linestring
tolerance: 320.0 tolerance: 240.0
# etldoc: imposm3 -> osm_boundary_linestring_gen3 # etldoc: imposm3 -> osm_boundary_linestring_gen3
boundary_linestring_gen3: boundary_linestring_gen3:
source: boundary_linestring source: boundary_linestring
tolerance: 150.0 tolerance: 120.0
# etldoc: imposm3 -> osm_boundary_linestring_gen2 # etldoc: imposm3 -> osm_boundary_linestring_gen2
boundary_linestring_gen2: boundary_linestring_gen2:
source: boundary_linestring source: boundary_linestring
tolerance: 100.0 tolerance: 60.0
# etldoc: imposm3 -> osm_boundary_linestring_gen1 # etldoc: imposm3 -> osm_boundary_linestring_gen1
boundary_linestring_gen1: boundary_linestring_gen1:
source: boundary_linestring source: boundary_linestring
tolerance: 50.0 tolerance: 30.0
tables: tables:
# etldoc: imposm3 -> osm_boundary_linestring # etldoc: imposm3 -> osm_boundary_linestring

View File

@ -1,11 +0,0 @@
# building
All [OSM Buildings](http://wiki.openstreetmap.org/wiki/Buildings). All building tags are imported ([`building=*`](http://wiki.openstreetmap.org/wiki/Key:building)). The buildings are not yet ready for 3D rendering support and any help to improve
this is welcomed.
## Fields
- **render_height**: An approximated height from levels and height of building after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear). For future 3D rendering of buildings.

View File

@ -1,22 +1,23 @@
-- etldoc: layer_building[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: layer_building[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_building | <z13> z13 | <z14_> z14_ " ] ; -- etldoc: label="layer_building | <z13> z13 | <z14_> z14_ " ] ;
CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, osm_id bigint, render_height int, render_min_height int) AS $$ RETURNS TABLE(geom geometry, osm_id bigint, render_height int, render_min_height int) AS $$
SELECT geometry, osm_id, SELECT geometry, osm_id, render_height, render_min_height
greatest(5, COALESCE(height, levels*3.66,5))::int AS render_height,
greatest(0, COALESCE(min_height, min_level*3.66,0))::int AS render_min_height
FROM ( FROM (
-- etldoc: osm_building_polygon_gen1 -> layer_building:z13 -- etldoc: osm_building_polygon_gen1 -> layer_building:z13
SELECT osm_id, geometry, height, levels, min_height, min_level FROM osm_building_polygon_gen1 SELECT
osm_id, geometry,
NULL::int AS render_height, NULL::int AS render_min_height
FROM osm_building_polygon_gen1
WHERE zoom_level = 13 AND geometry && bbox AND area > 1400 WHERE zoom_level = 13 AND geometry && bbox AND area > 1400
UNION ALL UNION ALL
-- etldoc: osm_building_polygon -> layer_building:z14_ -- etldoc: osm_building_polygon -> layer_building:z14_
SELECT osm_id, geometry, height, levels, min_height, min_level FROM osm_building_polygon SELECT
osm_id, geometry,
greatest(5, COALESCE(height, levels*3.66,5))::int AS render_height,
greatest(0, COALESCE(min_height, min_level*3.66,0))::int AS render_min_height
FROM osm_building_polygon
WHERE zoom_level >= 14 AND geometry && bbox WHERE zoom_level >= 14 AND geometry && bbox
) AS zoom_levels ) AS zoom_levels
ORDER BY render_height ASC, ST_YMin(geometry) DESC; ORDER BY render_height ASC, ST_YMin(geometry) DESC;

View File

@ -17,6 +17,9 @@ tables:
type: validated_geometry type: validated_geometry
- name: area - name: area
type: pseudoarea type: pseudoarea
- name: building
key: building
type: string
- name: height - name: height
key: height key: height
type: integer type: integer
@ -34,4 +37,9 @@ tables:
- __any__ - __any__
building: building:
- __any__ - __any__
filters:
exclude_tags:
- [ "building", "no" ]
- [ "building", "none" ]
- [ "building", "No" ]
type: polygon type: polygon

View File

@ -1,30 +0,0 @@
# highway
Roads or [`highway`](http://wiki.openstreetmap.org/wiki/Key:highway) in OpenStreetMap lingo.
This layer is directly derived from the OSM road hierarchy which is why it is called `highway`. Only
at zoom level 4 to 7 some major highways from Natural Earth are used otherwise it is only OSM data.
It contains all roads from motorways to primary, secondary and tertiary roads to residential roads and
foot paths. Styling the roads is the most essential part of the map. If you can put enough effort into it
makes sense to carefully style each `subclass`. For more comfortable styling you can also just style the roads
by `class`. Roads can have different properties, a road can have `oneway=yes` and `bridge=yes` at the same time.
These properties are reflected in the field `properties`.
This layer is not meant for labelling the roads (the purpose of the layer `highway_name`).
The `highway` layer also contains polygons for things like plazas.
## Fields
- **class**: Either `motorway`, `major_road` (containing `trunk`, `primary`, `secondary` and `tertiary` roads) and `minor_road` (less important roads in the hierarchy like `residential` or `service`) or `path` for
non vehicle paths (such as `cycleway` or `footpath`).
- **subclass**: Original value of the [`highway`](http://wiki.openstreetmap.org/wiki/Key:highway) tag. Use this to do more
precise styling.
- **properties**: Additional properties describing the nature of road.
The properties `bridge` and `tunnel` can be combined with `oneway` as well. So to style all bridges the same you
should style both the properties `bridge` and `bridge:oneway`.
Properties can be one of `bridge:oneway`, `tunnel:oneway`, `ramp`, `ford`, `bridge`, `tunnel` or`oneway`.
## Mapping
![](mapping.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

View File

@ -1,19 +0,0 @@
# highway_name
This is the layer for labelling the highways. Only highways that are named `name=*` and are long enough
to place text upon appear. The OSM roads are stitched together if they contain the same name
to have better label placement than having many small linestrings.
For motorways you should use the `ref` field to label them while for other roads you should use `name`.
## Fields
- **ref**: The OSM [`ref`](http://wiki.openstreetmap.org/wiki/Key:ref) tag of the motorway or road.
- **ref_length**: Length of the `ref` field. Useful for having a shield icon as background for labeling motorways.
- **name**: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Highways#Names_and_references) value of the highway.
- **subclass**: Original value of the [`highway`](http://wiki.openstreetmap.org/wiki/Key:highway) tag. Use this to do more
precise styling.
- **class**: Either `motorway`, `major_road` (containing `trunk`, `primary`, `secondary` and `tertiary` roads) and `minor_road` (less important roads in the hierarchy like `residential` or `service`) or `path` for
non vehicle paths (such as `cycleway` or `footpath`).

View File

@ -1,11 +0,0 @@
# housenumber
Everything in OpenStreetMap which contains a `addr:housenumber` tag useful for labelling housenumbers on a map.
This adds significant size to *z14*. For buildings the centroid of the building is used as housenumber.
## Fields
- **housenumber**: Value of the [`addr:housenumber`](http://wiki.openstreetmap.org/wiki/Key:addr) tag.

View File

@ -1,18 +0,0 @@
# landcover
Landcover is used to describe the physical material at the surface of the earth. At lower zoom levels this is
from Natural Earth data for glaciers and ice shelves and at higher zoom levels the landcover is implied
by OSM tags (like `landuse` or `natural`).
## Fields
- **class**: More generalized groups of either `farmland`, `ice`, `wood`, `grass` or `wetland`.
Use this to assign general colors to the landcover.
- **subclass**: Original value of either the `landuse`, `natural` or `wetland` tag.
Use this to do more precise styling.
## Mapping
![](mapping.png)

View File

@ -9,12 +9,12 @@
--); --);
--CREATE INDEX IF NOT EXISTS landcover_grouped_gen2_geometry_idx ON landcover_grouped_gen2 USING gist(geometry); --CREATE INDEX IF NOT EXISTS landcover_grouped_gen2_geometry_idx ON landcover_grouped_gen2 USING gist(geometry);
CREATE OR REPLACE FUNCTION landcover_class(landuse VARCHAR, "natural" VARCHAR, wetland VARCHAR) RETURNS TEXT AS $$ CREATE OR REPLACE FUNCTION landcover_class(landuse VARCHAR, "natural" VARCHAR, leisure VARCHAR, wetland VARCHAR) RETURNS TEXT AS $$
SELECT CASE SELECT CASE
WHEN landuse IN ('farmland', 'farm', 'orchard', 'vineyard', 'plant_nursery') THEN 'farmland' WHEN landuse IN ('farmland', 'farm', 'orchard', 'vineyard', 'plant_nursery') THEN 'farmland'
WHEN "natural" IN ('glacier', 'ice_shelf') THEN 'ice' WHEN "natural" IN ('glacier', 'ice_shelf') THEN 'ice'
WHEN "natural"='wood' OR landuse IN ('forest', 'wood') THEN 'wood' WHEN "natural"='wood' OR landuse IN ('forest', 'wood') THEN 'wood'
WHEN "natural"='grassland' OR landuse IN ('grass', 'meadow', 'village_green', 'allotments', 'park', 'recreation_ground', 'grassland') THEN 'grass' WHEN "natural"='grassland' OR landuse IN ('grass', 'meadow', 'allotments', 'grassland', 'park', 'village_green', 'recreation_ground') OR leisure='park' THEN 'grass'
WHEN "natural"='wetland' OR wetland IN ('bog', 'swamp', 'wet_meadow', 'marsh', 'reedbed', 'saltern', 'tidalflat', 'saltmarsh', 'mangrove') THEN 'wetland' WHEN "natural"='wetland' OR wetland IN ('bog', 'swamp', 'wet_meadow', 'marsh', 'reedbed', 'saltern', 'tidalflat', 'saltmarsh', 'mangrove') THEN 'wetland'
ELSE NULL ELSE NULL
END; END;
@ -22,70 +22,73 @@ $$ LANGUAGE SQL IMMUTABLE;
-- etldoc: ne_110m_glaciated_areas -> landcover_z0 -- etldoc: ne_110m_glaciated_areas -> landcover_z0
CREATE OR REPLACE VIEW landcover_z0 AS ( CREATE OR REPLACE VIEW landcover_z0 AS (
SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS wetland FROM ne_110m_glaciated_areas SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS leisure, NULL::text AS wetland FROM ne_110m_glaciated_areas
); );
CREATE OR REPLACE VIEW landcover_z2 AS ( CREATE OR REPLACE VIEW landcover_z2 AS (
-- etldoc: ne_50m_glaciated_areas -> landcover_z2 -- etldoc: ne_50m_glaciated_areas -> landcover_z2
SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS wetland FROM ne_50m_glaciated_areas SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS leisure, NULL::text AS wetland FROM ne_50m_glaciated_areas
UNION ALL UNION ALL
-- etldoc: ne_50m_antarctic_ice_shelves_polys -> landcover_z2 -- etldoc: ne_50m_antarctic_ice_shelves_polys -> landcover_z2
SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'ice_shelf'::text AS "natural", NULL::text AS wetland FROM ne_50m_antarctic_ice_shelves_polys SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'ice_shelf'::text AS "natural", NULL::text AS leisure, NULL::text AS wetland FROM ne_50m_antarctic_ice_shelves_polys
); );
CREATE OR REPLACE VIEW landcover_z5 AS ( CREATE OR REPLACE VIEW landcover_z5 AS (
-- etldoc: ne_10m_glaciated_areas -> landcover_z5 -- etldoc: ne_10m_glaciated_areas -> landcover_z5
SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS wetland FROM ne_10m_glaciated_areas SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'glacier'::text AS "natural", NULL::text AS leisure, NULL::text AS wetland FROM ne_10m_glaciated_areas
UNION ALL UNION ALL
-- etldoc: ne_10m_antarctic_ice_shelves_polys -> landcover_z5 -- etldoc: ne_10m_antarctic_ice_shelves_polys -> landcover_z5
SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'ice_shelf'::text AS "natural", NULL::text AS wetland FROM ne_10m_antarctic_ice_shelves_polys SELECT NULL::bigint AS osm_id, geom AS geometry, NULL::text AS landuse, 'ice_shelf'::text AS "natural", NULL::text AS leisure, NULL::text AS wetland FROM ne_10m_antarctic_ice_shelves_polys
); );
CREATE OR REPLACE VIEW landcover_z8 AS ( CREATE OR REPLACE VIEW landcover_z8 AS (
-- etldoc: osm_landcover_polygon_gen5 -> landcover_z8 -- etldoc: osm_landcover_polygon_gen6 -> landcover_z8
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon_gen5 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen6
); );
CREATE OR REPLACE VIEW landcover_z9 AS ( CREATE OR REPLACE VIEW landcover_z9 AS (
-- etldoc: osm_landcover_polygon_gen4 -> landcover_z9 -- etldoc: osm_landcover_polygon_gen5 -> landcover_z9
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon_gen4 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen5
); );
CREATE OR REPLACE VIEW landcover_z10 AS ( CREATE OR REPLACE VIEW landcover_z10 AS (
-- etldoc: osm_landcover_polygon_gen3 -> landcover_z10 -- etldoc: osm_landcover_polygon_gen4 -> landcover_z10
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon_gen3 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen4
); );
CREATE OR REPLACE VIEW landcover_z11 AS ( CREATE OR REPLACE VIEW landcover_z11 AS (
-- etldoc: osm_landcover_polygon_gen2 -> landcover_z11 -- etldoc: osm_landcover_polygon_gen3 -> landcover_z11
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon_gen2 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen3
); );
CREATE OR REPLACE VIEW landcover_z12 AS ( CREATE OR REPLACE VIEW landcover_z12 AS (
-- etldoc: osm_landcover_polygon_gen1 -> landcover_z12 -- etldoc: osm_landcover_polygon_gen2 -> landcover_z12
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon_gen1 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen2
); );
CREATE OR REPLACE VIEW landcover_z13 AS ( CREATE OR REPLACE VIEW landcover_z13 AS (
-- etldoc: osm_landcover_polygon -> landcover_z13 -- etldoc: osm_landcover_polygon_gen1 -> landcover_z13
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon WHERE ST_Area(geometry) > 60000 SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon_gen1
); );
CREATE OR REPLACE VIEW landcover_z14 AS ( CREATE OR REPLACE VIEW landcover_z14 AS (
-- etldoc: osm_landcover_polygon -> landcover_z14 -- etldoc: osm_landcover_polygon -> landcover_z14
SELECT osm_id, geometry, landuse, "natural", wetland FROM osm_landcover_polygon SELECT osm_id, geometry, landuse, "natural", leisure, wetland FROM osm_landcover_polygon
); );
-- etldoc: layer_landcover[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_landcover[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_landcover | <z0> z0 | <z2_4> z2_4 | <z5_7> z5_7 | <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14_" ] ; -- etldoc: label="layer_landcover | <z0_1> z0-z1 | <z2_4> z2-z4 | <z5_7> z5-z7 | <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_landcover(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_landcover(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$
SELECT osm_id, geometry, SELECT osm_id, geometry,
landcover_class(landuse, "natural", wetland) AS class, landcover_class(landuse, "natural", leisure, wetland) AS class,
COALESCE(NULLIF("natural", ''), NULLIF(landuse, ''), NULLIF('wetland', '')) AS subclass COALESCE(
NULLIF("natural", ''), NULLIF(landuse, ''),
NULLIF(leisure, ''), NULLIF(wetland, '')
) AS subclass
FROM ( FROM (
-- etldoc: landcover_z0 -> layer_landcover:z0 -- etldoc: landcover_z0 -> layer_landcover:z0_1
SELECT * FROM landcover_z0 SELECT * FROM landcover_z0
WHERE zoom_level BETWEEN 0 AND 1 AND geometry && bbox WHERE zoom_level BETWEEN 0 AND 1 AND geometry && bbox
UNION ALL UNION ALL
@ -98,31 +101,31 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$
WHERE zoom_level BETWEEN 5 AND 7 AND geometry && bbox WHERE zoom_level BETWEEN 5 AND 7 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z8 -> layer_landcover:z8 -- etldoc: landcover_z8 -> layer_landcover:z8
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z8 WHERE zoom_level = 8 AND geometry && bbox FROM landcover_z8 WHERE zoom_level = 8 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z9 -> layer_landcover:z9 -- etldoc: landcover_z9 -> layer_landcover:z9
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z9 WHERE zoom_level = 9 AND geometry && bbox FROM landcover_z9 WHERE zoom_level = 9 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z10 -> layer_landcover:z10 -- etldoc: landcover_z10 -> layer_landcover:z10
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z10 WHERE zoom_level = 10 AND geometry && bbox FROM landcover_z10 WHERE zoom_level = 10 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z11 -> layer_landcover:z11 -- etldoc: landcover_z11 -> layer_landcover:z11
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z11 WHERE zoom_level = 11 AND geometry && bbox FROM landcover_z11 WHERE zoom_level = 11 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z12 -> layer_landcover:z12 -- etldoc: landcover_z12 -> layer_landcover:z12
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z12 WHERE zoom_level = 12 AND geometry && bbox FROM landcover_z12 WHERE zoom_level = 12 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z13 -> layer_landcover:z13 -- etldoc: landcover_z13 -> layer_landcover:z13
SELECT osm_id, ST_Simplify(geometry, 10) AS geometry, landuse, "natural", wetland SELECT *
FROM landcover_z13 WHERE zoom_level = 13 AND geometry && bbox FROM landcover_z13 WHERE zoom_level = 13 AND geometry && bbox
UNION ALL UNION ALL
-- etldoc: landcover_z14 -> layer_landcover:z14_ -- etldoc: landcover_z14 -> layer_landcover:z14_
SELECT osm_id, geometry, landuse, "natural", wetland SELECT *
FROM landcover_z14 WHERE zoom_level >= 14 AND geometry && bbox FROM landcover_z14 WHERE zoom_level >= 14 AND geometry && bbox
) AS zoom_levels; ) AS zoom_levels;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -2,16 +2,52 @@ layer:
id: "landcover" id: "landcover"
description: | description: |
Landcover is used to describe the physical material at the surface of the earth. At lower zoom levels this is Landcover is used to describe the physical material at the surface of the earth. At lower zoom levels this is
from Natural Earth data for glaciers and ice shelves and at higher zoom levels the landcover is implied from Natural Earth data for glaciers and ice shelves and at higher zoom levels the [landcover is [implied by OSM tags](http://wiki.openstreetmap.org/wiki/Landcover). The most common use case for this layer
by OSM tags (like `landuse` or `natural`). is to style wood (`class=wood`) and grass (`class=`grass`) areas.
buffer_size: 4 buffer_size: 4
fields: fields:
class: | class:
More generalized groups of either `farmland`, `ice`, `wood`, `grass` or `wetland`. description: |
Use this to assign general colors to the landcover. Use the **class** to assign natural colors for **landcover**.
subclass: | values:
Original value of either the `landuse`, `natural` or `wetland` tag. - farmland
Use this to do more precise styling. - ice
- wood
- grass
- wetland
subclass:
description: |
Use **subclass** to do more precise styling.
Original value of either the
[`natural`](http://wiki.openstreetmap.org/wiki/Key:natural),
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
,[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure),
or [`wetland`](http://wiki.openstreetmap.org/wiki/Key:wetland) tag.
values:
- allotments
- farm
- farmland
- orchard
- plant_nursery
- vineyard
- grass
- grassland
- meadow
- forest
- village_green
- recreation_ground
- park
- wetland
- grassland
- bog
- swamp
- wet_meadow
- marsh
- reedbed
- saltern
- tidalflat
- saltmarsh
- mangrove
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

View File

@ -1,38 +1,44 @@
generalized_tables: generalized_tables:
# etldoc: imposm3 -> osm_landcover_polygon_gen6
landcover_polygon_gen6:
source: landcover_polygon_gen5
sql_filter: area>15000000
tolerance: 300.0
# etldoc: imposm3 -> osm_landcover_polygon_gen5 # etldoc: imposm3 -> osm_landcover_polygon_gen5
landcover_polygon_gen5: landcover_polygon_gen5:
source: landcover_polygon_gen4 source: landcover_polygon_gen4
sql_filter: area>15000000 sql_filter: area>4200000
tolerance: 300.0 tolerance: 200.0
# etldoc: imposm3 -> osm_landcover_polygon_gen4 # etldoc: imposm3 -> osm_landcover_polygon_gen4
landcover_polygon_gen4: landcover_polygon_gen4:
source: landcover_polygon_gen3 source: landcover_polygon_gen3
sql_filter: area>4200000
tolerance: 200.0
# etldoc: imposm3 -> osm_landcover_polygon_gen3
landcover_polygon_gen3:
source: landcover_polygon_gen2
sql_filter: area>1200000 sql_filter: area>1200000
tolerance: 120.0 tolerance: 120.0
# etldoc: imposm3 -> osm_landcover_polygon_gen2 # etldoc: imposm3 -> osm_landcover_polygon_gen3
landcover_polygon_gen2: landcover_polygon_gen3:
source: landcover_polygon_gen1 source: landcover_polygon_gen2
sql_filter: area>480000 sql_filter: area>480000
tolerance: 80.0 tolerance: 80.0
# etldoc: imposm3 -> osm_landcover_polygon_gen1 # etldoc: imposm3 -> osm_landcover_polygon_gen2
landcover_polygon_gen1: landcover_polygon_gen2:
source: landcover_polygon source: landcover_polygon_gen1
sql_filter: area>240000 sql_filter: area>240000
tolerance: 50.0 tolerance: 50.0
# etldoc: imposm3 -> osm_landcover_polygon_gen1
landcover_polygon_gen1:
source: landcover_polygon
sql_filter: area>60000
tolerance: 20.0
tables: tables:
# etldoc: imposm3 -> osm_landcover_polygon
# etldoc: imposm3 -> osm_landcover_polygon
landcover_polygon: landcover_polygon:
fields: fields:
- name: osm_id - name: osm_id
@ -42,6 +48,9 @@ tables:
- name: landuse - name: landuse
key: landuse key: landuse
type: string type: string
- name: leisure
key: leisure
type: string
- name: natural - name: natural
key: natural key: natural
type: string type: string
@ -61,13 +70,16 @@ tables:
- grass - grass
- grassland - grassland
- meadow - meadow
- park - forest
- village_green - village_green
- recreation_ground - recreation_ground
- forest # There are 600 parks tagged with landuse=park instead of leisure=park
- park
natural: natural:
- wetland - wetland
- grassland - grassland
leisure:
- park
wetland: wetland:
- bog - bog
- swamp - swamp

View File

@ -1,17 +0,0 @@
# landuse
Landuse is used to describe use of land by humans.At lower zoom levels this is
from Natural Earth data for residential (urban) areas and at higher zoom levels mostly OSM `landuse` tags.
## Fields
- **class**: More generalized groups of either `park`, `school`, `hospital`, `railway`,
`cemetery`, `military`, `residential`. Use this to assign general for landuse.
- **subclass**: Original value of either the `amenity`, `landuse`, `leisure` or `boundary` tag.
Use this to do more precise styling.
## Mapping
![](mapping.png)

View File

@ -1,112 +1,101 @@
CREATE OR REPLACE FUNCTION landuse_class(landuse TEXT, amenity TEXT, leisure TEXT, boundary TEXT) RETURNS TEXT AS $$
SELECT CASE
WHEN leisure IN ('nature_reserve', 'park') OR boundary='national_park' THEN 'park'
WHEN amenity IN ('school', 'university', 'kindergarten', 'college', 'library') THEN 'school'
WHEN landuse IN('hospital', 'railway', 'cemetery', 'military', 'residential') THEN landuse
ELSE NULL
END;
$$ LANGUAGE SQL IMMUTABLE;
-- 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, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS boundary, scalerank SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, 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, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS boundary, scalerank SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, 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, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS boundary, scalerank SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, scalerank
FROM ne_10m_urban_areas FROM ne_10m_urban_areas
); );
-- etldoc: osm_landuse_polygon_gen5 -> landuse_z8 -- etldoc: osm_landuse_polygon_gen4 -> landuse_z10
CREATE OR REPLACE VIEW landuse_z8 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon_gen5
);
-- etldoc: osm_landuse_polygon_gen4 -> landuse_z9
CREATE OR REPLACE VIEW landuse_z9 AS ( CREATE OR REPLACE VIEW landuse_z9 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon_gen4 SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
FROM osm_landuse_polygon_gen4
); );
-- etldoc: osm_landuse_polygon_gen3 -> landuse_z10 -- etldoc: osm_landuse_polygon_gen3 -> landuse_z10
CREATE OR REPLACE VIEW landuse_z10 AS ( CREATE OR REPLACE VIEW landuse_z10 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon_gen3 SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
FROM osm_landuse_polygon_gen3
); );
-- etldoc: osm_landuse_polygon_gen2 -> landuse_z11 -- etldoc: osm_landuse_polygon_gen2 -> landuse_z11
CREATE OR REPLACE VIEW landuse_z11 AS ( CREATE OR REPLACE VIEW landuse_z11 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon_gen2 SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
FROM osm_landuse_polygon_gen2
); );
-- etldoc: osm_landuse_polygon_gen1 -> landuse_z12 -- etldoc: osm_landuse_polygon_gen1 -> landuse_z12
CREATE OR REPLACE VIEW landuse_z12 AS ( CREATE OR REPLACE VIEW landuse_z12 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon_gen1 SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
FROM osm_landuse_polygon_gen1
); );
-- etldoc: osm_landuse_polygon -> landuse_z13 -- etldoc: osm_landuse_polygon -> landuse_z13
CREATE OR REPLACE VIEW landuse_z13 AS ( CREATE OR REPLACE VIEW landuse_z13 AS (
SELECT osm_id, geometry, landuse, amenity, leisure, boundary, NULL::int as scalerank FROM osm_landuse_polygon SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
WHERE ST_Area(geometry) > 60000 FROM osm_landuse_polygon
WHERE ST_Area(geometry) > 20000
); );
-- 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, boundary, NULL::int as scalerank FROM osm_landuse_polygon SELECT osm_id, geometry, landuse, amenity, leisure, NULL::int as scalerank
FROM osm_landuse_polygon
); );
-- etldoc: layer_landuse[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_landuse[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_landuse |<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_landuse |<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_landuse(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_landuse(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, class text) AS $$
SELECT osm_id, geometry, SELECT osm_id, geometry,
landuse_class(landuse, amenity, leisure, boundary) AS class, COALESCE(
COALESCE(NULLIF(landuse, ''), NULLIF(amenity, ''), NULLIF(leisure, ''), NULLIF(boundary, '')) AS subclass NULLIF(landuse, ''),
NULLIF(amenity, ''),
NULLIF(leisure, '')
) AS class
FROM ( FROM (
-- etldoc: landuse_z4 -> layer_landuse:z4 -- etldoc: landuse_z4 -> layer_landuse:z4
SELECT * FROM landuse_z4 SELECT * FROM landuse_z4
WHERE zoom_level = 4 WHERE zoom_level = 4
UNION ALL UNION ALL
-- etldoc: landuse_z5 -> layer_landuse:z5 -- etldoc: landuse_z5 -> layer_landuse:z5
SELECT * FROM landuse_z5 SELECT * FROM landuse_z5
WHERE zoom_level = 5 WHERE zoom_level = 5
UNION ALL UNION ALL
-- etldoc: landuse_z6 -> layer_landuse:z6 -- etldoc: landuse_z6 -> layer_landuse:z6
-- etldoc: landuse_z6 -> layer_landuse:z7 -- etldoc: landuse_z6 -> layer_landuse:z7
-- etldoc: landuse_z6 -> layer_landuse:z8 -- etldoc: landuse_z6 -> layer_landuse:z8
-- etldoc: landuse_z6 -> layer_landuse:z9
-- etldoc: landuse_z6 -> layer_landuse:z10
SELECT * FROM landuse_z6 SELECT * FROM landuse_z6
WHERE zoom_level BETWEEN 6 AND 10 AND scalerank-1 <= zoom_level WHERE zoom_level BETWEEN 6 AND 8 AND scalerank-1 <= zoom_level
UNION ALL UNION ALL
-- etldoc: landuse_z8 -> layer_landuse:z8 -- etldoc: landuse_z9 -> layer_landuse:z9
SELECT * FROM landuse_z8 WHERE zoom_level = 8
UNION ALL
-- etldoc: landuse_z9 -> layer_landuse:z9
SELECT * FROM landuse_z9 WHERE zoom_level = 9 SELECT * FROM landuse_z9 WHERE zoom_level = 9
UNION ALL UNION ALL
-- etldoc: landuse_z10 -> layer_landuse:z10 -- etldoc: landuse_z10 -> layer_landuse:z10
SELECT * FROM landuse_z10 WHERE zoom_level = 10 SELECT * FROM landuse_z10 WHERE zoom_level = 10
UNION ALL UNION ALL
-- etldoc: landuse_z11 -> layer_landuse:z11 -- etldoc: landuse_z11 -> layer_landuse:z11
SELECT * FROM landuse_z11 WHERE zoom_level = 11 SELECT * FROM landuse_z11 WHERE zoom_level = 11
UNION ALL UNION ALL
-- etldoc: landuse_z12 -> layer_landuse:z12 -- etldoc: landuse_z12 -> layer_landuse:z12
SELECT * FROM landuse_z12 WHERE zoom_level = 12 SELECT * FROM landuse_z12 WHERE zoom_level = 12
UNION ALL UNION ALL
-- etldoc: landuse_z13 -> layer_landuse:z13 -- etldoc: landuse_z13 -> layer_landuse:z13
SELECT * FROM landuse_z13 WHERE zoom_level = 13 SELECT * FROM landuse_z13 WHERE zoom_level = 13
UNION ALL UNION ALL
-- etldoc: landuse_z14 -> layer_landuse:z14_ -- etldoc: landuse_z14 -> layer_landuse:z14
SELECT * FROM landuse_z14 WHERE zoom_level >= 14 SELECT * FROM landuse_z14 WHERE zoom_level >= 14
) AS zoom_levels ) AS zoom_levels
WHERE geometry && bbox; WHERE geometry && bbox;

View File

@ -5,15 +5,31 @@ layer:
from Natural Earth data for residential (urban) areas and at higher zoom levels mostly OSM `landuse` tags. from Natural Earth data for residential (urban) areas and at higher zoom levels mostly OSM `landuse` tags.
buffer_size: 4 buffer_size: 4
fields: fields:
class: | class:
More generalized groups of either `park`, `school`, `hospital`, `railway`, description: |
`cemetery`, `military`, `residential`. Use this to assign general for landuse. Use the **class** to assign special colors to areas.
subclass: | Original value of either the
Original value of either the `amenity`, `landuse`, `leisure` or `boundary` tag. [`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
Use this to do more precise styling. [`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
or [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure) tag.
values:
- school
- university
- kindergarten
- college
- library
- hospital
- railway
- cemetery
- military
- residential
- commercial
- industrial
- retail
- stadium
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, class, subclass FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, class FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./landuse.sql - ./landuse.sql
datasources: datasources:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1,37 +1,26 @@
generalized_tables: generalized_tables:
# etldoc: imposm3 -> osm_landuse_polygon_gen4
# etldoc: imposm3 -> osm_landuse_polygon_gen5
landuse_polygon_gen5:
source: landuse_polygon_gen4
sql_filter: area>15000000
tolerance: 300.0
# etldoc: imposm3 -> osm_landuse_polygon_gen4
landuse_polygon_gen4: landuse_polygon_gen4:
source: landuse_polygon_gen3 source: landuse_polygon_gen3
sql_filter: area>4200000 sql_filter: area>2000000
tolerance: 200.0 tolerance: 160.0
# etldoc: imposm3 -> osm_landuse_polygon_gen3
# etldoc: imposm3 -> osm_landuse_polygon_gen3
landuse_polygon_gen3: landuse_polygon_gen3:
source: landuse_polygon_gen2 source: landuse_polygon_gen2
sql_filter: area>1200000 sql_filter: area>960000
tolerance: 120.0 tolerance: 80.0
# etldoc: imposm3 -> osm_landuse_polygon_gen2
# etldoc: imposm3 -> osm_landuse_polygon_gen2
landuse_polygon_gen2: landuse_polygon_gen2:
source: landuse_polygon_gen1 source: landuse_polygon_gen1
sql_filter: area>480000 sql_filter: area>240000
tolerance: 80.0 tolerance: 40.0
# etldoc: imposm3 -> osm_landuse_polygon_gen1
# etldoc: imposm3 -> osm_landuse_polygon_gen1
landuse_polygon_gen1: landuse_polygon_gen1:
source: landuse_polygon source: landuse_polygon
sql_filter: area>240000 sql_filter: area>60000
tolerance: 50.0 tolerance: 20.0
tables: tables:
# etldoc: imposm3 -> osm_landuse_polygon # etldoc: imposm3 -> osm_landuse_polygon
landuse_polygon: landuse_polygon:
type: polygon type: polygon
@ -49,9 +38,6 @@ tables:
- name: leisure - name: leisure
key: leisure key: leisure
type: string type: string
- name: boundary
key: boundary
type: string
- name: area - name: area
type: pseudoarea type: pseudoarea
mapping: mapping:
@ -66,8 +52,10 @@ tables:
- railway - railway
- cemetery - cemetery
- military - military
# zoning
- residential
- commercial
- industrial
- retail
leisure: leisure:
- nature_reserve - stadium
- park
boundary:
- national_park

55
layers/park/layer.sql Normal file
View File

@ -0,0 +1,55 @@
-- etldoc: layer_park[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_park |<z6> z6 |<z7> z7 |<z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_park(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, class text) AS $$
SELECT osm_id, geometry,
COALESCE(NULLIF(leisure, ''), NULLIF(boundary, '')) AS class
FROM (
-- etldoc: osm_park_polygon_gen8 -> layer_park:z6
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen8
WHERE zoom_level = 6
UNION ALL
-- etldoc: osm_park_polygon_gen7 -> layer_park:z7
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen7
WHERE zoom_level = 7
UNION ALL
-- etldoc: osm_park_polygon_gen6 -> layer_park:z8
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen6
WHERE zoom_level = 8
UNION ALL
-- etldoc: osm_park_polygon_gen5 -> layer_park:z9
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen5
WHERE zoom_level = 9
UNION ALL
-- etldoc: osm_park_polygon_gen4 -> layer_park:z10
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen4
WHERE zoom_level = 10
UNION ALL
-- etldoc: osm_park_polygon_gen3 -> layer_park:z11
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen3
WHERE zoom_level = 11
UNION ALL
-- etldoc: osm_park_polygon_gen2 -> layer_park:z12
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen2
WHERE zoom_level = 12
UNION ALL
-- etldoc: osm_park_polygon_gen1 -> layer_park:z13
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon_gen1
WHERE zoom_level = 13
UNION ALL
-- etldoc: osm_park_polygon -> layer_park:z14
SELECT osm_id, geometry, leisure, boundary, NULL::int as scalerank
FROM osm_park_polygon
WHERE zoom_level >= 14
) AS zoom_levels
WHERE geometry && bbox;
$$ LANGUAGE SQL IMMUTABLE;

75
layers/park/mapping.yaml Normal file
View File

@ -0,0 +1,75 @@
generalized_tables:
# etldoc: imposm3 -> osm_park_polygon_gen8
park_polygon_gen8:
source: park_polygon_gen6
sql_filter: area>240000000
tolerance: 600.0
# etldoc: imposm3 -> osm_park_polygon_gen7
park_polygon_gen7:
source: park_polygon_gen6
sql_filter: area>60000000
tolerance: 400.0
# etldoc: imposm3 -> osm_park_polygon_gen6
park_polygon_gen6:
source: park_polygon_gen5
sql_filter: area>15000000
tolerance: 300.0
# etldoc: imposm3 -> osm_park_polygon_gen5
park_polygon_gen5:
source: park_polygon_gen4
sql_filter: area>4200000
tolerance: 200.0
# etldoc: imposm3 -> osm_park_polygon_gen4
park_polygon_gen4:
source: park_polygon_gen3
sql_filter: area>1200000
tolerance: 120.0
# etldoc: imposm3 -> osm_park_polygon_gen3
park_polygon_gen3:
source: park_polygon_gen2
sql_filter: area>480000
tolerance: 80.0
# etldoc: imposm3 -> osm_park_polygon_gen2
park_polygon_gen2:
source: park_polygon_gen1
sql_filter: area>240000
tolerance: 50.0
# etldoc: imposm3 -> osm_park_polygon_gen1
park_polygon_gen1:
source: park_polygon
sql_filter: area>60000
tolerance: 20.0
tables:
# etldoc: imposm3 -> osm_park_polygon
park_polygon:
type: polygon
fields:
- name: osm_id
type: id
- name: geometry
type: validated_geometry
- name: landuse
key: landuse
type: string
- name: leisure
key: leisure
type: string
- name: boundary
key: boundary
type: string
- name: area
type: pseudoarea
mapping:
leisure:
- nature_reserve
boundary:
- national_park

20
layers/park/park.yaml Normal file
View File

@ -0,0 +1,20 @@
layer:
id: "park"
description: |
The park layer contains parks from OpenStreetMap tagged with either [`boundary=national_park`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dnational_park) or [`leisure=nature_reserve`](http://wiki.openstreetmap.org/wiki/Tag:leisure%3Dnature_reserve).
buffer_size: 4
fields:
class:
description: |
Use the **class** to differentiate between different parks.
values:
- national_park
- nature_reserve
datasource:
geometry_field: geometry
query: (SELECT geometry, class FROM layer_park(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./layer.sql
datasources:
- type: imposm3
mapping_file: ./mapping.yaml

View File

@ -1,29 +0,0 @@
# place
The place layer consists out of [countries](http://wiki.openstreetmap.org/wiki/Tag:place%3Dcountry),
[states](http://wiki.openstreetmap.org/wiki/Tag:place%3Dstate) and [cities](http://wiki.openstreetmap.org/wiki/Key:place).
Apart from the roads this is also one of the more important layers to create a beautiful map.
We suggest you use different font styles and sizes to create a text hierarchy.
## Fields
- **name_en**: The english `name:en` value if available.
- **name**: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI.
- **rank**: Countries, states and the most important cities all have a `rank` to boost their importance on the map.
The `rank` field for counries and states ranges from `1` to `6` while the `rank` field for
cities ranges from `1` to `10` for the most important cities and continues from `10` serially based
on the local importance of the city (derived from population and city class).
Use the `rank` field to build a text hierarchy.
The rank value is a combination of the Natural Earth `scalerank`, `labelrank` and `datarank` values for countries
and states and for cities consists out of a shifted Natural Earth `scalerank` combined with a local rank
within a grid for cities that do not have a Natural Earth `scalerank`.
- **class**: Distinguish between `country`, `state` and other city classes like
`city`, `town`, `village`, `hamlet`, `suburb`, `neighbourhood` or `isolated_dwelling`.
Use this to separately style the different places according to their importance (usually country and state different
than cities).
## Mapping
![](mapping.png)

View File

@ -9,7 +9,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, place c
FROM osm_city_point FROM osm_city_point
WHERE geometry && bbox WHERE geometry && bbox
AND ((zoom_level = 2 AND "rank" = 1) AND ((zoom_level = 2 AND "rank" = 1)
OR (zoom_level BETWEEN 3 AND 7 AND "rank" <= zoom_level) OR (zoom_level BETWEEN 3 AND 7 AND "rank" <= zoom_level + 1)
) )
UNION ALL UNION ALL
SELECT osm_id, geometry, name, SELECT osm_id, geometry, name,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -6,10 +6,43 @@ name_en_field: &name_en
name: name_en name: name_en
key: name:en key: name:en
type: string type: string
name_fr_field: &name_fr
name: name_fr
key: name:fr
type: string
name_de_field: &name_de
name: name_de
key: name:de
type: string
name_es_field: &name_es
name: name_es
key: name:es
type: string
name_pt_field: &name_pt
name: name_pt
key: name:pt
type: string
name_ru_field: &name_ru
name: name_ru
key: name:ru
type: string
name_zh_field: &name_zh
name: name_zh
key: name:zh
type: string
name_ar_field: &name_ar
name: name_ar
key: name:ar
type: string
name_ja_field: &name_ja
name: name_ja
key: name:ja
type: string
rank_field: &rank rank_field: &rank
name: rank name: rank
key: rank key: rank
type: integer type: integer
tables: tables:
# etldoc: imposm3 -> osm_continent_point # etldoc: imposm3 -> osm_continent_point
@ -39,6 +72,14 @@ tables:
type: geometry type: geometry
- *name - *name
- *name_en - *name_en
- *name_de
- *name_fr
- *name_es
- *name_pt
- *name_ru
- *name_zh
- *name_ar
- *name_ja
- *rank - *rank
filters: filters:
exclude_tags: exclude_tags:
@ -47,6 +88,32 @@ tables:
place: place:
- country - country
# etldoc: imposm3 -> osm_island_point
island_point:
type: point
fields:
- name: osm_id
type: id
- name: geometry
type: geometry
- *name
- *name_en
- *name_de
- *name_fr
- *name_es
- *name_pt
- *name_ru
- *name_zh
- *name_ar
- *name_ja
- *rank
filters:
exclude_tags:
- [ "name", "__nil__" ]
mapping:
place:
- island
# etldoc: imposm3 -> osm_state_point # etldoc: imposm3 -> osm_state_point
state_point: state_point:
type: point type: point
@ -57,6 +124,14 @@ tables:
type: geometry type: geometry
- *name - *name
- *name_en - *name_en
- *name_de
- *name_fr
- *name_es
- *name_pt
- *name_ru
- *name_zh
- *name_ar
- *name_ja
- name: is_in_country - name: is_in_country
key: is_in:country key: is_in:country
type: string type: string
@ -84,6 +159,14 @@ tables:
type: geometry type: geometry
- *name - *name
- *name_en - *name_en
- *name_de
- *name_fr
- *name_es
- *name_pt
- *name_ru
- *name_zh
- *name_ar
- *name_ja
- name: place - name: place
key: place key: place
type: string type: string

View File

@ -1,31 +0,0 @@
# poi
[Points of interests](http://wiki.openstreetmap.org/wiki/Points_of_interest) containing
a of a variety of OpenStreetMap tags. Mostly contains amenities, sport, shop and tourist POIs.
## Fields
- **class**: More general classes of POIs. If there is no more general `class` for the `subclass`
this field will contain the same value as `subclass`.
But for example for schools you only need to style the class `school` to filter the subclasses `school`
and `kindergarten`. Or use the class `shop` to style all shops.
- **name_en**: The english `name:en` value if available.
- **name**: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI.
- **rank**: The POIs are ranked ascending according to their importance within a grid. The `rank` value shows the
local relative importance of a POI within it's cell in the grid. This can be used to reduce label density at z14.
Since all POIs already need to be contained at `z14` you can use `less than rank=10` epxression to limit
POIs. At some point like z17 you can show all POIs.
- **subclass**: Original value of either the
[`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure),
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
[`sport`](http://wiki.openstreetmap.org/wiki/Key:sport),
[`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism)
or [`shop`](http://wiki.openstreetmap.org/wiki/Key:shop)
tag. Use this to do more precise styling.
## Mapping
![](mapping.png)

View File

@ -4,11 +4,10 @@
CREATE OR REPLACE FUNCTION layer_poi(bbox geometry, zoom_level integer, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_poi(bbox geometry, zoom_level integer, pixel_width numeric)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text, subclass text, "rank" int) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text, subclass text, "rank" int) AS $$
SELECT osm_id, geometry, name, NULLIF(name_en, ''), poi_class(subclass) AS class, subclass, SELECT osm_id, geometry, NULLIF(name, '') AS name, NULLIF(name_en, '') AS name_en, poi_class(subclass) AS class, subclass,
row_number() OVER ( row_number() OVER (
PARTITION BY LabelGrid(geometry, 100 * pixel_width) PARTITION BY LabelGrid(geometry, 100 * pixel_width)
ORDER BY poi_class_rank(poi_class(subclass)) ASC, ORDER BY CASE WHEN name = '' THEN 2000 ELSE poi_class_rank(poi_class(subclass)) END ASC
length(name) DESC NULLS LAST
)::int AS "rank" )::int AS "rank"
FROM ( FROM (
-- etldoc: osm_poi_point -> layer_poi:z14 -- etldoc: osm_poi_point -> layer_poi:z14

Binary file not shown.

Before

Width:  |  Height:  |  Size: 521 KiB

View File

@ -1,19 +0,0 @@
# railway
The `railway` layer contains linestrings marking tracks from [OSM Railways](http://wiki.openstreetmap.org/wiki/Railways).
It contains tracks for [passenger and freight trains]() and smaller tracks for [Trams](http://wiki.openstreetmap.org/wiki/Tag:railway%3Dtram) or [similar](http://wiki.openstreetmap.org/wiki/Tag:railway%3Dlight_rail) vehicles. But also tracks for [subways](http://wiki.openstreetmap.org/wiki/Tag:railway%3Dsubway), [narrow-gauge trains](http://wiki.openstreetmap.org/wiki/Tag:railway%3Dnarrow_gauge) or [historic trains](http://wiki.openstreetmap.org/wiki/Tag:railway%3Dpreserved).
Non mainline tracks (marked with class `minor_rail`) used for [storage of trains](http://wiki.openstreetmap.org/wiki/Tag:service%3Dyard) and [maintenance](http://wiki.openstreetmap.org/wiki/Tag:service%3Dsiding) are contained in the highest zoom levels and should be styled more subtle than the mainline tracks with class `rail`.
## Fields
- **class**: Divides the track into mainline tracks (class `rail`) and less important tracks
used for maintenance (class `minor_rail`).
- **subclass**: Original value of the [`railway`](http://wiki.openstreetmap.org/wiki/Key:railway) can be one of
`rail`, `light_rail`, `subway`, `narrow_gauge`, `preserved`, `tram`.
- **properties**: Additional properties describing the nature of tracks. Can be either `bridge` or `tunnel`.
## Mapping
![](mapping.png)

View File

@ -1,14 +0,0 @@
digraph "Imposm Mapping" {
graph [rankdir=LR ranksep=3]
subgraph railway_linestring {
node [fixed_size=shape "width:"=20]
railway_linestring [shape=box]
key_railway [label=railway shape=box]
key_railway -> railway_linestring [label="rail
light_rail
subway
narrow_gauge
preserved
tram"]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,18 +0,0 @@
# water
Water polygons representing oceans and lakes. Covered watered areas are excluded (`covered=yes`).
Until z6 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.
Water from OpenStreetMap after z7 is split into many smaller polygons to improve rendering performance.
This however can lead to less rendering options in clients since these boundaries show up. So you might not be
able to use border styling for ocean water features.
## Fields
- **class**: Either `ocean`, `lake` or `river`.
## Mapping
![](mapping.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,22 +1,34 @@
generalized_tables: generalized_tables:
# etldoc: imposm3 -> osm_water_polygon_gen5
water_polygon_gen5:
source: water_polygon_gen4
sql_filter: area>10000000.0
tolerance: 320.0
# etldoc: imposm3 -> osm_water_polygon_gen4
water_polygon_gen4:
source: water_polygon_gen3
sql_filter: area>5000000.0
tolerance: 160.0
# etldoc: imposm3 -> osm_water_polygon_gen3 # etldoc: imposm3 -> osm_water_polygon_gen3
water_polygon_gen3: water_polygon_gen3:
source: water_polygon source: water_polygon_gen2
sql_filter: area>15000000.0 AND waterway = '' sql_filter: area>2500000.0
tolerance: 350.0 tolerance: 80.0
# etldoc: imposm3 -> osm_water_polygon_gen2 # etldoc: imposm3 -> osm_water_polygon_gen2
water_polygon_gen2: water_polygon_gen2:
source: water_polygon source: water_polygon_gen1
sql_filter: area>2000000 AND waterway = '' sql_filter: area>1000000
tolerance: 200.0 tolerance: 40.0
# etldoc: imposm3 -> osm_water_polygon_gen1 # etldoc: imposm3 -> osm_water_polygon_gen1
water_polygon_gen1: water_polygon_gen1:
source: water_polygon source: water_polygon
sql_filter: area>500000 AND waterway = '' sql_filter: area>500000 AND waterway = ''
tolerance: 100.0 tolerance: 20.0
tables: tables:

View File

@ -56,8 +56,8 @@ CREATE OR REPLACE VIEW water_z7 AS (
-- etldoc: ne_10m_ocean -> water_z7 -- etldoc: ne_10m_ocean -> water_z7
SELECT geom, 'ocean'::text AS class FROM ne_10m_ocean SELECT geom, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: osm_water_polygon_gen3 -> water_z7 -- etldoc: osm_water_polygon_gen3 -> water_z7
SELECT geometry AS geom, 'lake' AS class FROM osm_water_polygon_gen3 SELECT geometry AS geom, 'lake' AS class FROM osm_water_polygon_gen5
); );
CREATE OR REPLACE VIEW water_z8 AS ( CREATE OR REPLACE VIEW water_z8 AS (
@ -65,30 +65,53 @@ CREATE OR REPLACE VIEW water_z8 AS (
SELECT geom, 'ocean'::text AS class FROM ne_10m_ocean SELECT geom, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: osm_water_polygon_gen2 -> water_z8 -- etldoc: osm_water_polygon_gen2 -> water_z8
SELECT geometry AS geom, 'lake' AS class FROM osm_water_polygon_gen2 SELECT geometry AS geom, 'lake' AS class FROM osm_water_polygon_gen4
); );
CREATE OR REPLACE VIEW water_z9 AS ( CREATE OR REPLACE VIEW water_z9 AS (
-- etldoc: osm_ocean_polygon_gen3 -> water_z9
SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon_gen3
UNION ALL
-- etldoc: osm_water_polygon_gen1 -> water_z9 -- etldoc: osm_water_polygon_gen1 -> water_z9
SELECT geometry AS geom, 'lake'::text AS class FROM osm_water_polygon_gen1 SELECT geometry AS geom, 'lake'::text AS class FROM osm_water_polygon_gen3
);
CREATE OR REPLACE VIEW water_z10 AS (
-- etldoc: osm_ocean_polygon_gen2 -> water_z10
SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon_gen2
UNION ALL
-- etldoc: osm_water_polygon_gen2 -> water_z10
SELECT geometry AS geom, 'lake'::text AS class FROM osm_water_polygon_gen2
); );
CREATE OR REPLACE VIEW water_z11 AS ( CREATE OR REPLACE VIEW water_z11 AS (
-- etldoc: osm_water_polygon -> water_z11 -- etldoc: osm_ocean_polygon_gen1 -> water_z11
SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 40000 SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon_gen1
UNION ALL
-- etldoc: osm_water_polygon -> water_z11
SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon_gen1 WHERE area > 40000
); );
CREATE OR REPLACE VIEW water_z12 AS ( CREATE OR REPLACE VIEW water_z12 AS (
-- etldoc: osm_ocean_polygon_gen1 -> water_z12
SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL
-- etldoc: osm_water_polygon -> water_z12 -- etldoc: osm_water_polygon -> water_z12
SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 10000 SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 10000
); );
CREATE OR REPLACE VIEW water_z13 AS ( CREATE OR REPLACE VIEW water_z13 AS (
-- etldoc: osm_ocean_polygon -> water_z13
SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL
-- etldoc: osm_water_polygon -> water_z13 -- etldoc: osm_water_polygon -> water_z13
SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 5000 SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 5000
); );
CREATE OR REPLACE VIEW water_z14 AS ( CREATE OR REPLACE VIEW water_z14 AS (
-- etldoc: osm_ocean_polygon -> water_z14
SELECT geometry AS geom, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL
-- etldoc: osm_water_polygon -> water_z14 -- etldoc: osm_water_polygon -> water_z14
SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon SELECT geometry AS geom, water_class(waterway) AS class FROM osm_water_polygon
); );
@ -124,9 +147,11 @@ RETURNS TABLE(geom geometry, class text) AS $$
-- etldoc: water_z8 -> layer_water:z8 -- etldoc: water_z8 -> layer_water:z8
SELECT * FROM water_z8 WHERE zoom_level = 8 SELECT * FROM water_z8 WHERE zoom_level = 8
UNION ALL UNION ALL
-- etldoc: water_z9 -> layer_water:z9 -- etldoc: water_z9 -> layer_water:z9
SELECT * FROM water_z9 WHERE zoom_level = 9
UNION ALL
-- etldoc: water_z9 -> layer_water:z10 -- etldoc: water_z9 -> layer_water:z10
SELECT * FROM water_z9 WHERE zoom_level BETWEEN 9 AND 10 SELECT * FROM water_z9 WHERE zoom_level = 10
UNION ALL UNION ALL
-- etldoc: water_z11 -> layer_water:z11 -- etldoc: water_z11 -> layer_water:z11
SELECT * FROM water_z11 WHERE zoom_level = 11 SELECT * FROM water_z11 WHERE zoom_level = 11

View File

@ -1,14 +0,0 @@
# water_name
Lake center lines for labelling lake bodies.
This is based of the [osm-lakelines](https://github.com/lukasmartinelli/osm-lakelines) project
which derives nice centerlines from OSM water bodies. Only the most important lakes contain labels.
## Fields
- **name_en**: The english `name:en` value if available.
- **name**: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the water body.
- **class**: At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*.

View File

@ -1,16 +1,22 @@
-- etldoc: layer_water_name[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_water_name[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_water_name | <z9_13> z9_13 | <z14_> z14_" ] ; -- etldoc: label="layer_water_name | <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, class text) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text) 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 osm_id, geometry, name, name_en, 'lake'::text AS class SELECT osm_id, geometry, name, name_en, 'lake'::text AS class
FROM osm_water_lakeline FROM osm_water_lakeline
WHERE geometry && bbox WHERE geometry && bbox
AND name <> ''
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))
OR (zoom_level >= 14)) OR (zoom_level >= 14))
ORDER BY ST_Length(geometry) DESC; -- etldoc: osm_water_point -> layer_water_name:z9_13
UNION ALL
SELECT osm_id, geometry, name, name_en, 'lake'::text AS class
FROM osm_water_point
WHERE geometry && bbox AND (
(zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level))
OR (zoom_level >= 14)
);
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -1,11 +1,12 @@
-- etldoc: osm_water_polygon -> osm_water_lakeline -- etldoc: osm_water_polygon -> osm_water_lakeline
-- etldoc: custom_lakeline -> osm_water_lakeline
CREATE TABLE IF NOT EXISTS osm_water_lakeline AS ( CREATE TABLE IF NOT EXISTS osm_water_lakeline AS (
SELECT wp.osm_id, SELECT wp.osm_id,
ll.wkb_geometry AS geometry, ll.wkb_geometry AS geometry,
name, name_en name, name_en, ST_Area(wp.geometry) AS area
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 <> ''
); );
CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry);

View File

@ -16,7 +16,8 @@ layer:
srid: 900913 srid: 900913
query: (SELECT geometry, name, name_en, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, name, name_en, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./merge_lakelines.sql - ./water_lakeline.sql
- ./water_point.sql
- ./layer.sql - ./layer.sql
datasources: datasources:
- type: imposm3 - type: imposm3

View File

@ -0,0 +1,11 @@
-- etldoc: osm_water_polygon -> osm_water_lakeline
CREATE TABLE IF NOT EXISTS osm_water_point AS (
SELECT
wp.osm_id, topoint(wp.geometry) AS geometry,
wp.name, wp.name_en, ST_Area(wp.geometry) AS area
FROM osm_water_polygon AS wp
LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
WHERE ll.osm_id IS NULL AND wp.name <> ''
);
CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry);

View File

@ -1,20 +0,0 @@
# waterway
Rivers based of OpenStreetMap [waterways](http://wiki.openstreetmap.org/wiki/Waterways) for *z8* to *z14*
and Natural Earth rivers and lake centerlines from *z3* to *z7*.
Too short linestrings are filtered out for some zoom levels. Waterways do no not have a `subclass`.
## Fields
- **class**: The original value of the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag.
Can be one of [`stream`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dstream),
[`river`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Driver),
[`canal`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dcanal),
[`drain`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Ddrain),
[`ditch`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dditch)`.
## Mapping
![](mapping.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,14 +1,19 @@
generalized_tables: generalized_tables:
# etldoc: imposm3 -> osm_waterway_linestring_gen0 # etldoc: imposm3 -> osm_waterway_linestring_gen3
waterway_linestring_gen0: waterway_linestring_gen3:
source: waterway_linestring_gen1 source: waterway_linestring_gen2
sql_filter: waterway IN ('river') AND ST_Length(geometry) > 10000 sql_filter: waterway IN ('river')
tolerance: 200.0 tolerance: 200.0
# etldoc: imposm3 -> osm_waterway_linestring_gen1 # etldoc: imposm3 -> osm_waterway_linestring_gen2
waterway_linestring_gen2:
source: waterway_linestring_gen1
sql_filter: waterway IN ('river')
tolerance: 100.0
# etldoc: imposm3 -> osm_waterway_linestring_gen1
waterway_linestring_gen1: waterway_linestring_gen1:
source: waterway_linestring source: waterway_linestring
sql_filter: waterway IN ('river') AND ST_Length(geometry) > 5000 sql_filter: waterway IN ('river')
tolerance: 100.0 tolerance: 50.0
tables: tables:
# etldoc: imposm3 -> osm_waterway_linestring # etldoc: imposm3 -> osm_waterway_linestring
waterway_linestring: waterway_linestring:

View File

@ -0,0 +1,44 @@
-- We merge the waterways by name like the highways
-- This helps to drop not important rivers (since they do not have a name)
-- and also makes it possible to filter out too short rivers
-- etldoc: osm_waterway_linestring -> osm_important_waterway_linestring
CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring AS (
SELECT
(ST_Dump(geometry)).geom AS geometry,
name
FROM (
SELECT
ST_LineMerge(ST_Union(geometry)) AS geometry,
name
FROM osm_waterway_linestring
WHERE name <> '' AND waterway = 'river'
GROUP BY name
) AS waterway_union
);
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry);
-- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1
CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen1 AS (
SELECT ST_Simplify(geometry, 60) AS geometry, name
FROM osm_important_waterway_linestring
WHERE ST_Length(geometry) > 1000
);
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen1_geometry_idx ON osm_important_waterway_linestring_gen1 USING gist(geometry);
-- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2
CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen2 AS (
SELECT ST_Simplify(geometry, 100) AS geometry, name
FROM osm_important_waterway_linestring_gen1
WHERE ST_Length(geometry) > 4000
);
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen2_geometry_idx ON osm_important_waterway_linestring_gen2 USING gist(geometry);
-- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3
CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen3 AS (
SELECT ST_Simplify(geometry, 200) AS geometry, name
FROM osm_important_waterway_linestring_gen2
WHERE ST_Length(geometry) > 8000
);
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry);

View File

@ -1,89 +1,85 @@
-- 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 geom AS geometry, 'river'::text AS class FROM ne_110m_rivers_lake_centerlines SELECT geom AS geometry, 'river'::text AS class, NULL AS name 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 geom AS geometry, 'river'::text AS class FROM ne_50m_rivers_lake_centerlines SELECT geom AS geometry, 'river'::text AS class, NULL AS name 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 geom AS geometry, 'river'::text AS class FROM ne_10m_rivers_lake_centerlines SELECT geom AS geometry, 'river'::text AS class, NULL AS name FROM ne_10m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: osm_waterway_linestring -> waterway_z8 -- etldoc: osm_waterway_linestring_gen3 -> waterway_z9
CREATE OR REPLACE VIEW waterway_z8 AS (
SELECT geometry, waterway AS class FROM osm_waterway_linestring
WHERE waterway IN ('river') AND ST_Length(geometry) > 10000
);
-- etldoc: osm_waterway_linestring -> waterway_z9
CREATE OR REPLACE VIEW waterway_z9 AS ( CREATE OR REPLACE VIEW waterway_z9 AS (
SELECT geometry, waterway AS class FROM osm_waterway_linestring SELECT geometry, 'river'::text AS class, name FROM osm_important_waterway_linestring_gen3
WHERE waterway IN ('river') AND ST_Length(geometry) > 5000
); );
-- etldoc: osm_waterway_linestring -> waterway_z11 -- etldoc: osm_waterway_linestring_gen2 -> waterway_z10
CREATE OR REPLACE VIEW waterway_z10 AS (
SELECT geometry, 'river'::text AS class, name FROM osm_important_waterway_linestring_gen2
);
-- etldoc: osm_waterway_linestring_gen1 -> waterway_z11
CREATE OR REPLACE VIEW waterway_z11 AS ( CREATE OR REPLACE VIEW waterway_z11 AS (
SELECT geometry, waterway AS class FROM osm_waterway_linestring SELECT geometry, 'river'::text AS class, name FROM osm_important_waterway_linestring_gen1
WHERE waterway IN ('river') AND ST_Length(geometry) > 5000
); );
-- 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 AS class FROM osm_waterway_linestring SELECT geometry, waterway AS class, name FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal') OR (waterway = 'stream' AND ST_Length(geometry) > 1000) 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 AS class FROM osm_waterway_linestring SELECT geometry, waterway::text AS class, name FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') AND ST_Length(geometry) > 300 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 AS class FROM osm_waterway_linestring SELECT geometry, waterway::text AS class, name FROM osm_waterway_linestring
); );
-- etldoc: layer_waterway[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: layer_waterway[shape=record fillcolor=lightpink, style="rounded,filled", -- 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_5 |<z6_7> z6_7 | <z8> z8 |<z9_10> z9_10 |<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) AS $$ RETURNS TABLE(geometry geometry, class text, name text) AS $$
SELECT geometry, class FROM ( SELECT geometry, class, NULLIF(name, '') AS name FROM (
-- etldoc: waterway_z3 -> layer_waterway:z3 -- etldoc: waterway_z3 -> layer_waterway:z3
SELECT * FROM waterway_z3 WHERE zoom_level = 3 SELECT * FROM waterway_z3 WHERE zoom_level = 3
UNION ALL UNION ALL
-- etldoc: waterway_z4 -> layer_waterway:z4_5 -- etldoc: waterway_z4 -> layer_waterway:z4_5
SELECT * FROM waterway_z4 WHERE zoom_level BETWEEN 4 AND 5 SELECT * FROM waterway_z4 WHERE zoom_level BETWEEN 4 AND 5
UNION ALL UNION ALL
-- etldoc: waterway_z6 -> layer_waterway:z6_7 -- etldoc: waterway_z6 -> layer_waterway:z6_8
SELECT * FROM waterway_z6 WHERE zoom_level BETWEEN 6 AND 7 SELECT * FROM waterway_z6 WHERE zoom_level BETWEEN 6 AND 8
UNION ALL UNION ALL
-- etldoc: waterway_z8 -> layer_waterway:z8 -- etldoc: waterway_z9 -> layer_waterway:z9
SELECT * FROM waterway_z8 WHERE zoom_level = 8 SELECT * FROM waterway_z9 WHERE zoom_level = 9
UNION ALL UNION ALL
-- etldoc: waterway_z9 -> layer_waterway:z9_10 -- etldoc: waterway_z10 -> layer_waterway:z10
SELECT * FROM waterway_z9 WHERE zoom_level BETWEEN 9 AND 10 SELECT * FROM waterway_z10 WHERE zoom_level = 10
UNION ALL UNION ALL
-- etldoc: waterway_z11 -> layer_waterway:z11 -- etldoc: waterway_z11 -> layer_waterway:z11
SELECT * FROM waterway_z11 WHERE zoom_level = 11 SELECT * FROM waterway_z11 WHERE zoom_level = 11
UNION ALL UNION ALL
-- etldoc: waterway_z12 -> layer_waterway:z12 -- etldoc: waterway_z12 -> layer_waterway:z12
SELECT * FROM waterway_z12 WHERE zoom_level = 12 SELECT * FROM waterway_z12 WHERE zoom_level = 12
UNION ALL UNION ALL
-- etldoc: waterway_z13 -> layer_waterway:z13 -- etldoc: waterway_z13 -> layer_waterway:z13
SELECT * FROM waterway_z13 WHERE zoom_level = 13 SELECT * FROM waterway_z13 WHERE zoom_level = 13
UNION ALL UNION ALL
-- etldoc: waterway_z14 -> layer_waterway:z14_ -- etldoc: waterway_z14 -> layer_waterway:z14
SELECT * FROM waterway_z14 WHERE zoom_level >= 14 SELECT * FROM waterway_z14 WHERE zoom_level >= 14
) AS zoom_levels ) AS zoom_levels
WHERE geometry && bbox; WHERE geometry && bbox;

View File

@ -1,11 +1,15 @@
layer: layer:
id: "waterway" id: "waterway"
description: | description: |
Rivers based of OpenStreetMap [waterways](http://wiki.openstreetmap.org/wiki/Waterways) for *z8* to *z14* Rivers based of OpenStreetMap [waterways](http://wiki.openstreetmap.org/wiki/Waterways) for *z9* to *z14*
and Natural Earth rivers and lake centerlines from *z3* to *z7*. and Natural Earth rivers and lake centerlines from *z3* to *z8*.
Too short linestrings are filtered out for some zoom levels. Waterways do no not have a `subclass`. Linestrings without a name or which are too short are filtered
out at low zoom levels. Waterways do no not have a `subclass` field.
buffer_size: 4 buffer_size: 4
fields: fields:
name: |
The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the waterway.
The `name` field is empty for NaturalEarth data until **z9** when OSM data is used.
class: | class: |
The original value of the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag. The original value of the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag.
Can be one of [`stream`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dstream), Can be one of [`stream`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dstream),
@ -15,8 +19,9 @@ layer:
[`ditch`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dditch)`. [`ditch`](http://wiki.openstreetmap.org/wiki/Tag:waterway%3Dditch)`.
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, class FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, name, class FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./merge_waterway.sql
- ./waterway.sql - ./waterway.sql
datasources: datasources:
- type: imposm3 - type: imposm3

View File

@ -12,6 +12,7 @@ tileset:
- layers/water/water.yaml - layers/water/water.yaml
- layers/waterway/waterway.yaml - layers/waterway/waterway.yaml
- layers/landcover/landcover.yaml - layers/landcover/landcover.yaml
- layers/park/park.yaml
- layers/landuse/landuse.yaml - layers/landuse/landuse.yaml
name: OpenMapTiles v1.0 name: OpenMapTiles v1.0
description: "A tileset showcasing all layers in OpenMapTiles. http://openmaptiles.org" description: "A tileset showcasing all layers in OpenMapTiles. http://openmaptiles.org"