Merge branch 'master' into bicycle-foot-horse-mtb_scale
@@ -16,7 +16,6 @@ CREATE OR REPLACE VIEW boundary_z1 AS (
|
||||
UNION ALL
|
||||
SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime
|
||||
FROM ne_50m_admin_1_states_provinces_lines
|
||||
WHERE scalerank <= 2
|
||||
);
|
||||
|
||||
|
||||
@@ -43,29 +42,19 @@ CREATE OR REPLACE VIEW boundary_z4 AS (
|
||||
UNION ALL
|
||||
SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime
|
||||
FROM ne_10m_admin_1_states_provinces_lines
|
||||
WHERE scalerank <= 3 AND min_zoom <= 7
|
||||
WHERE min_zoom <= 5
|
||||
UNION ALL
|
||||
SELECT geometry, admin_level, disputed, maritime
|
||||
FROM osm_border_linestring_gen10
|
||||
WHERE maritime=true AND admin_level <= 2
|
||||
);
|
||||
|
||||
-- etldoc: ne_10m_admin_0_boundary_lines_land -> boundary_z5
|
||||
-- etldoc: ne_10m_admin_1_states_provinces_lines -> boundary_z5
|
||||
-- etldoc: osm_border_linestring_gen9 -> boundary_z5
|
||||
|
||||
CREATE OR REPLACE VIEW boundary_z5 AS (
|
||||
SELECT geometry, 2 AS admin_level, false AS disputed, false AS maritime
|
||||
FROM ne_10m_admin_0_boundary_lines_land
|
||||
WHERE featurecla <> 'Lease limit'
|
||||
UNION ALL
|
||||
SELECT geometry, 4 AS admin_level, false AS disputed, false AS maritime
|
||||
FROM ne_10m_admin_1_states_provinces_lines
|
||||
WHERE scalerank <= 7 AND min_zoom <= 8
|
||||
UNION ALL
|
||||
SELECT geometry, admin_level, disputed, maritime
|
||||
FROM osm_border_linestring_gen9
|
||||
WHERE maritime=true AND admin_level <= 2
|
||||
WHERE admin_level <= 4
|
||||
);
|
||||
|
||||
-- etldoc: osm_border_linestring_gen8 -> boundary_z6
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
layer:
|
||||
id: "boundary"
|
||||
description: |
|
||||
Contains administrative boundaries (no maritime boundaries yet) as linestrings.
|
||||
Until z7 [Natural Earth data](http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/)
|
||||
is used after which OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative)) are present from z8 to z14.
|
||||
OSM data contains all [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level)
|
||||
Contains administrative boundaries as linestrings.
|
||||
Until z4 [Natural Earth data](http://www.naturalearthdata.com/downloads/) is used after which
|
||||
OSM boundaries ([`boundary=administrative`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative))
|
||||
are present from z5 to z14 (also for maritime boundaries with admin_level <= 2 at z4).
|
||||
OSM data contains several [`admin_level`](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level)
|
||||
but for most styles it makes sense to just style `admin_level=2` and `admin_level=4`.
|
||||
fields:
|
||||
admin_level: |
|
||||
|
||||
|
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 218 KiB |
@@ -26,6 +26,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height,
|
||||
COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels,
|
||||
COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level,
|
||||
nullif(material, '') AS material,
|
||||
nullif(colour, '') AS colour,
|
||||
FALSE as hide_3d
|
||||
FROM
|
||||
osm_building_relation WHERE building = ''
|
||||
@@ -38,6 +40,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height,
|
||||
COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels,
|
||||
COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level,
|
||||
nullif(material, '') AS material,
|
||||
nullif(colour, '') AS colour,
|
||||
FALSE as hide_3d
|
||||
FROM
|
||||
osm_building_associatedstreet WHERE role = 'house'
|
||||
@@ -49,6 +53,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height,
|
||||
COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels,
|
||||
COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level,
|
||||
nullif(material, '') AS material,
|
||||
nullif(colour, '') AS colour,
|
||||
FALSE as hide_3d
|
||||
FROM
|
||||
osm_building_street WHERE role = 'house'
|
||||
@@ -61,6 +67,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height,
|
||||
COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels,
|
||||
COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level,
|
||||
nullif(material, '') AS material,
|
||||
nullif(colour, '') AS colour,
|
||||
FALSE as hide_3d
|
||||
FROM
|
||||
osm_building_polygon obp WHERE EXISTS (SELECT 1 FROM osm_building_multipolygon obm WHERE obp.osm_id = obm.osm_id)
|
||||
@@ -72,6 +80,8 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
COALESCE(nullif(as_numeric(obp.min_height),-1),nullif(as_numeric(obp.buildingmin_height),-1)) as min_height,
|
||||
COALESCE(nullif(as_numeric(obp.levels),-1),nullif(as_numeric(obp.buildinglevels),-1)) as levels,
|
||||
COALESCE(nullif(as_numeric(obp.min_level),-1),nullif(as_numeric(obp.buildingmin_level),-1)) as min_level,
|
||||
nullif(obp.material, '') AS material,
|
||||
nullif(obp.colour, '') AS colour,
|
||||
CASE WHEN obr.role='outline' THEN TRUE ELSE FALSE END as hide_3d
|
||||
FROM
|
||||
osm_building_polygon obp
|
||||
@@ -80,14 +90,35 @@ CREATE OR REPLACE VIEW osm_all_buildings AS (
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int)
|
||||
RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_height int, hide_3d boolean) AS $$
|
||||
RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_height int, colour text, hide_3d boolean) AS $$
|
||||
SELECT geometry, osm_id, render_height, render_min_height,
|
||||
COALESCE(colour, CASE material
|
||||
-- Ordered by count from taginfo
|
||||
WHEN 'cement_block' THEN '#6a7880'
|
||||
WHEN 'brick' THEN '#bd8161'
|
||||
WHEN 'plaster' THEN '#dadbdb'
|
||||
WHEN 'wood' THEN '#d48741'
|
||||
WHEN 'concrete' THEN '#d3c2b0'
|
||||
WHEN 'metal' THEN '#b7b1a6'
|
||||
WHEN 'stone' THEN '#b4a995'
|
||||
WHEN 'mud' THEN '#9d8b75'
|
||||
WHEN 'steel' THEN '#b7b1a6' -- same as metal
|
||||
WHEN 'glass' THEN '#5a81a0'
|
||||
WHEN 'traditional' THEN '#bd8161' -- same as brick
|
||||
WHEN 'masonry' THEN '#bd8161' -- same as brick
|
||||
WHEN 'Brick' THEN '#bd8161' -- same as brick
|
||||
WHEN 'tin' THEN '#b7b1a6' -- same as metal
|
||||
WHEN 'timber_framing' THEN '#b3b0a9'
|
||||
WHEN 'sandstone' THEN '#b4a995' -- same as stone
|
||||
WHEN 'clay' THEN '#9d8b75' -- same as mud
|
||||
END) AS colour,
|
||||
CASE WHEN hide_3d THEN TRUE ELSE NULL::boolean END AS hide_3d
|
||||
FROM (
|
||||
-- etldoc: osm_building_polygon_gen1 -> layer_building:z13
|
||||
SELECT
|
||||
osm_id, geometry,
|
||||
NULL::int AS render_height, NULL::int AS render_min_height,
|
||||
NULL::text AS material, NULL::text AS colour,
|
||||
FALSE AS hide_3d
|
||||
FROM osm_building_polygon_gen1
|
||||
WHERE zoom_level = 13 AND geometry && bbox
|
||||
@@ -97,6 +128,8 @@ RETURNS TABLE(geometry geometry, osm_id bigint, render_height int, render_min_he
|
||||
osm_id, geometry,
|
||||
ceil( COALESCE(height, levels*3.66,5))::int AS render_height,
|
||||
floor(COALESCE(min_height, min_level*3.66,0))::int AS render_min_height,
|
||||
material,
|
||||
colour,
|
||||
hide_3d
|
||||
FROM osm_all_buildings
|
||||
WHERE
|
||||
|
||||
@@ -5,12 +5,14 @@ layer:
|
||||
this is welcomed.
|
||||
buffer_size: 4
|
||||
datasource:
|
||||
query: (SELECT geometry, render_height, render_min_height, hide_3d FROM layer_building(!bbox!, z(!scale_denominator!))) AS t
|
||||
query: (SELECT geometry, render_height, render_min_height, colour, hide_3d FROM layer_building(!bbox!, z(!scale_denominator!))) AS t
|
||||
fields:
|
||||
render_height: |
|
||||
An approximated height from levels and height of the building or building:part after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear). For future 3D rendering of buildings.
|
||||
render_min_height: |
|
||||
An approximated height from levels and height of the bottom of the building or building:part after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear). For future 3D rendering of buildings.
|
||||
colour: |
|
||||
Colour
|
||||
hide_3d: |
|
||||
If True, building (part) should not be rendered in 3D. Currently, [building outlines](https://wiki.openstreetmap.org/wiki/Simple_3D_buildings) are marked as hide_3d.
|
||||
schema:
|
||||
|
||||
@@ -17,6 +17,12 @@ tables:
|
||||
type: area
|
||||
- name: webmerc_area
|
||||
type: webmerc_area
|
||||
- name: material
|
||||
key: building:material
|
||||
type: string
|
||||
- name: colour
|
||||
key: building:colour
|
||||
type: string
|
||||
- name: building
|
||||
key: building
|
||||
type: string
|
||||
@@ -78,6 +84,12 @@ tables:
|
||||
key: building
|
||||
type: string
|
||||
from_member: true
|
||||
- name: material
|
||||
key: building:material
|
||||
type: string
|
||||
- name: colour
|
||||
key: building:colour
|
||||
type: string
|
||||
- name: buildingpart
|
||||
key: building:part
|
||||
type: string
|
||||
@@ -166,6 +178,12 @@ tables:
|
||||
key: building
|
||||
type: string
|
||||
from_member: true
|
||||
- name: material
|
||||
key: building:material
|
||||
type: string
|
||||
- name: colour
|
||||
key: building:colour
|
||||
type: string
|
||||
- name: buildingpart
|
||||
key: building:part
|
||||
type: string
|
||||
@@ -254,6 +272,12 @@ tables:
|
||||
key: building
|
||||
type: string
|
||||
from_member: true
|
||||
- name: material
|
||||
key: building:material
|
||||
type: string
|
||||
- name: colour
|
||||
key: building:colour
|
||||
type: string
|
||||
- name: buildingpart
|
||||
key: building:part
|
||||
type: string
|
||||
@@ -342,6 +366,12 @@ tables:
|
||||
key: building
|
||||
type: string
|
||||
from_member: true
|
||||
- name: material
|
||||
key: building:material
|
||||
type: string
|
||||
- name: colour
|
||||
key: building:colour
|
||||
type: string
|
||||
- name: buildingpart
|
||||
key: building:part
|
||||
type: string
|
||||
|
||||
@@ -25,7 +25,7 @@ CREATE OR REPLACE FUNCTION housenumber.flag() RETURNS trigger AS $$
|
||||
BEGIN
|
||||
INSERT INTO housenumber.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
|
||||
RETURN null;
|
||||
END;
|
||||
END;
|
||||
$$ language plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS
|
||||
|
||||
@@ -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+" ] ;
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_housenumber(bbox geometry, zoom_level integer)
|
||||
|
||||
@@ -26,33 +26,35 @@ layer:
|
||||
or [`wetland`](http://wiki.openstreetmap.org/wiki/Key:wetland) tag.
|
||||
values:
|
||||
- allotments
|
||||
- bare_rock
|
||||
- beach
|
||||
- bog
|
||||
- farm
|
||||
- farmland
|
||||
- orchard
|
||||
- plant_nursery
|
||||
- vineyard
|
||||
- forest
|
||||
- garden
|
||||
- glacier
|
||||
- grass
|
||||
- grassland
|
||||
- glacier
|
||||
- meadow
|
||||
- forest
|
||||
- village_green
|
||||
- recreation_ground
|
||||
- park
|
||||
- garden
|
||||
- wetland
|
||||
- grassland
|
||||
- bog
|
||||
- swamp
|
||||
- wet_meadow
|
||||
- mangrove
|
||||
- marsh
|
||||
- meadow
|
||||
- orchard
|
||||
- park
|
||||
- plant_nursery
|
||||
- recreation_ground
|
||||
- reedbed
|
||||
- saltern
|
||||
- tidalflat
|
||||
- saltmarsh
|
||||
- mangrove
|
||||
- beach
|
||||
- sand
|
||||
- scree
|
||||
- swamp
|
||||
- tidalflat
|
||||
- village_green
|
||||
- vineyard
|
||||
- wet_meadow
|
||||
- wetland
|
||||
- wood
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
query: (SELECT geometry, class, subclass FROM layer_landcover(!bbox!, z(!scale_denominator!))) AS t
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
-- etldoc: ne_50m_urban_areas -> landuse_z4
|
||||
CREATE OR REPLACE VIEW landuse_z4 AS (
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank
|
||||
FROM ne_50m_urban_areas
|
||||
WHERE scalerank <= 2
|
||||
);
|
||||
|
||||
-- etldoc: ne_50m_urban_areas -> landuse_z5
|
||||
CREATE OR REPLACE VIEW landuse_z5 AS (
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank
|
||||
FROM ne_50m_urban_areas
|
||||
);
|
||||
|
||||
-- etldoc: ne_10m_urban_areas -> landuse_z6
|
||||
CREATE OR REPLACE VIEW landuse_z6 AS (
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, scalerank
|
||||
SELECT NULL::bigint AS osm_id, geometry, 'residential'::text AS landuse, NULL::text AS amenity, NULL::text AS leisure, NULL::text AS tourism, NULL::text AS place, scalerank
|
||||
FROM ne_10m_urban_areas
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon_gen5 -> landuse_z9
|
||||
CREATE OR REPLACE VIEW landuse_z9 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon_gen5
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon_gen4 -> landuse_z10
|
||||
CREATE OR REPLACE VIEW landuse_z10 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon_gen4
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon_gen3 -> landuse_z11
|
||||
CREATE OR REPLACE VIEW landuse_z11 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon_gen3
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon_gen2 -> landuse_z12
|
||||
CREATE OR REPLACE VIEW landuse_z12 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon_gen2
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon_gen1 -> landuse_z13
|
||||
CREATE OR REPLACE VIEW landuse_z13 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure,tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon_gen1
|
||||
);
|
||||
|
||||
-- etldoc: osm_landuse_polygon -> landuse_z14
|
||||
CREATE OR REPLACE VIEW landuse_z14 AS (
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, NULL::int as scalerank
|
||||
SELECT osm_id, geometry, landuse, amenity, leisure, tourism, place, NULL::int as scalerank
|
||||
FROM osm_landuse_polygon
|
||||
);
|
||||
|
||||
@@ -63,7 +63,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text) AS $$
|
||||
NULLIF(landuse, ''),
|
||||
NULLIF(amenity, ''),
|
||||
NULLIF(leisure, ''),
|
||||
NULLIF(tourism, '')
|
||||
NULLIF(tourism, ''),
|
||||
NULLIF(place, '')
|
||||
) AS class
|
||||
FROM (
|
||||
-- etldoc: landuse_z4 -> layer_landuse:z4
|
||||
|
||||
@@ -9,17 +9,12 @@ layer:
|
||||
description: |
|
||||
Use the **class** to assign special colors to areas.
|
||||
Original value of either the
|
||||
[`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
|
||||
[`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism),
|
||||
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
|
||||
or [`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure) tag.
|
||||
[`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
|
||||
[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure),
|
||||
[`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism),
|
||||
or [`place`](http://wiki.openstreetmap.org/wiki/Key:place) tag.
|
||||
values:
|
||||
- school
|
||||
- university
|
||||
- kindergarten
|
||||
- college
|
||||
- library
|
||||
- hospital
|
||||
- railway
|
||||
- cemetery
|
||||
- military
|
||||
@@ -27,12 +22,21 @@ layer:
|
||||
- commercial
|
||||
- industrial
|
||||
- retail
|
||||
- bus_station
|
||||
- school
|
||||
- university
|
||||
- kindergarten
|
||||
- college
|
||||
- library
|
||||
- hospital
|
||||
- stadium
|
||||
- pitch
|
||||
- playground
|
||||
- track
|
||||
- theme_park
|
||||
- bus_station
|
||||
- zoo
|
||||
- suburb
|
||||
- neighbourhood
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
query: (SELECT geometry, class FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t
|
||||
|
||||
@@ -46,19 +46,14 @@ tables:
|
||||
- name: tourism
|
||||
key: tourism
|
||||
type: string
|
||||
- name: place
|
||||
key: place
|
||||
type: string
|
||||
- name: area
|
||||
type: area
|
||||
- name: webmerc_area
|
||||
type: webmerc_area
|
||||
mapping:
|
||||
amenity:
|
||||
- bus_station
|
||||
- school
|
||||
- university
|
||||
- kindergarten
|
||||
- college
|
||||
- library
|
||||
- hospital
|
||||
landuse:
|
||||
- railway
|
||||
- cemetery
|
||||
@@ -68,10 +63,22 @@ tables:
|
||||
- commercial
|
||||
- industrial
|
||||
- retail
|
||||
amenity:
|
||||
- bus_station
|
||||
- school
|
||||
- university
|
||||
- kindergarten
|
||||
- college
|
||||
- library
|
||||
- hospital
|
||||
leisure:
|
||||
- stadium
|
||||
- pitch
|
||||
- playground
|
||||
- track
|
||||
tourism:
|
||||
- theme_park
|
||||
- zoo
|
||||
place:
|
||||
- suburb
|
||||
- neighbourhood
|
||||
|
||||
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 52 KiB |
@@ -2,29 +2,52 @@
|
||||
-- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink,
|
||||
-- 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)
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, ele int, ele_ft int, "rank" int) AS $$
|
||||
CREATE OR REPLACE FUNCTION layer_mountain_peak(
|
||||
bbox geometry,
|
||||
zoom_level integer,
|
||||
pixel_width numeric)
|
||||
RETURNS TABLE(
|
||||
osm_id bigint,
|
||||
geometry geometry,
|
||||
name text,
|
||||
name_en text,
|
||||
name_de text,
|
||||
class text,
|
||||
tags hstore,
|
||||
ele int,
|
||||
ele_ft int,
|
||||
"rank" int) AS
|
||||
$$
|
||||
-- etldoc: osm_peak_point -> layer_mountain_peak:z7_
|
||||
SELECT osm_id, geometry, name, name_en, name_de, tags, ele::int, ele_ft::int, rank::int
|
||||
FROM (
|
||||
SELECT osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele,
|
||||
round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft,
|
||||
row_number() OVER (
|
||||
PARTITION BY LabelGrid(geometry, 100 * pixel_width)
|
||||
ORDER BY (
|
||||
substring(ele from E'^(-?\\d+)(\\D|$)')::int +
|
||||
(CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) +
|
||||
(CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END)
|
||||
) DESC
|
||||
)::int AS "rank"
|
||||
FROM osm_peak_point
|
||||
WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+'
|
||||
) AS ranked_peaks
|
||||
WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14)
|
||||
ORDER BY "rank" ASC;
|
||||
SELECT
|
||||
osm_id,
|
||||
geometry,
|
||||
name,
|
||||
name_en,
|
||||
name_de,
|
||||
tags -> 'natural' AS class,
|
||||
tags,
|
||||
ele::int,
|
||||
ele_ft::int,
|
||||
rank::int FROM (
|
||||
SELECT osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele,
|
||||
round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft,
|
||||
row_number() OVER (
|
||||
PARTITION BY LabelGrid(geometry, 100 * pixel_width)
|
||||
ORDER BY (
|
||||
substring(ele from E'^(-?\\d+)(\\D|$)')::int +
|
||||
(CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) +
|
||||
(CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END)
|
||||
) DESC
|
||||
)::int AS "rank"
|
||||
FROM osm_peak_point
|
||||
WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+'
|
||||
) AS ranked_peaks
|
||||
WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14)
|
||||
ORDER BY "rank" ASC;
|
||||
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@@ -28,3 +28,4 @@ tables:
|
||||
mapping:
|
||||
natural:
|
||||
- peak
|
||||
- volcano
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -8,13 +8,19 @@ layer:
|
||||
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak.
|
||||
name_en: English name `name:en` if available, otherwise `name`.
|
||||
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
|
||||
class:
|
||||
description: |
|
||||
Use the **class** to differentiate between mountain peak and volcano.
|
||||
values:
|
||||
- peak
|
||||
- volcano
|
||||
ele: Elevation (`ele`) in meters.
|
||||
ele_ft: Elevation (`ele`) in feets.
|
||||
rank: Rank of the peak within one tile (starting at 1 that is the most important peak).
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
srid: 900913
|
||||
query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
|
||||
query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
|
||||
schema:
|
||||
- ./update_peak_point.sql
|
||||
- ./layer.sql
|
||||
|
||||
@@ -44,7 +44,7 @@ RETURNS TEXT AS $$
|
||||
WHEN subclass IN ('supermarket','deli','delicatessen','department_store','greengrocer','marketplace') THEN 'grocery'
|
||||
WHEN subclass IN ('books','library') THEN 'library'
|
||||
WHEN subclass IN ('university','college') THEN 'college'
|
||||
WHEN subclass IN ('hotel','motel','bed_and_breakfast','guest_house','hostel','chalet','alpine_hut','camp_site') THEN 'lodging'
|
||||
WHEN subclass IN ('hotel','motel','bed_and_breakfast','guest_house','hostel','chalet','alpine_hut','dormitory') THEN 'lodging'
|
||||
WHEN subclass IN ('chocolate','confectionery') THEN 'ice_cream'
|
||||
WHEN subclass IN ('post_box','post_office') THEN 'post'
|
||||
WHEN subclass IN ('cafe') THEN 'cafe'
|
||||
|
||||
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
@@ -12,6 +12,7 @@ def_poi_mapping_amenity: &poi_mapping_amenity
|
||||
- bank
|
||||
- bar
|
||||
- bbq
|
||||
- bicycle_parking
|
||||
- bicycle_rental
|
||||
- biergarten
|
||||
- bus_station
|
||||
@@ -35,8 +36,10 @@ def_poi_mapping_amenity: &poi_mapping_amenity
|
||||
- kindergarten
|
||||
- library
|
||||
- marketplace
|
||||
- motorcycle_parking
|
||||
- nightclub
|
||||
- nursing_home
|
||||
- parking
|
||||
- pharmacy
|
||||
- place_of_worship
|
||||
- police
|
||||
@@ -70,6 +73,10 @@ def_poi_mapping_barrier: &poi_mapping_barrier
|
||||
- stile
|
||||
- toll_booth
|
||||
|
||||
# building values , see http://taginfo.openstreetmap.org/keys/building#values
|
||||
def_poi_mapping_building: &poi_mapping_building
|
||||
- dormitory
|
||||
|
||||
# highway values , see http://taginfo.openstreetmap.org/keys/highway#values
|
||||
def_poi_mapping_highway: &poi_mapping_highway
|
||||
- bus_stop
|
||||
@@ -86,6 +93,7 @@ def_poi_mapping_landuse: &poi_mapping_landuse
|
||||
- brownfield
|
||||
- cemetery
|
||||
- reservoir
|
||||
- winter_sports
|
||||
|
||||
# leisure values , see http://taginfo.openstreetmap.org/keys/leisure#values
|
||||
def_poi_mapping_leisure: &poi_mapping_leisure
|
||||
@@ -306,132 +314,78 @@ def_poi_mapping_tourism: &poi_mapping_tourism
|
||||
def_poi_mapping_waterway: &poi_mapping_waterway
|
||||
- dock
|
||||
|
||||
def_poi_fields: &poi_fields
|
||||
- name: osm_id
|
||||
type: id
|
||||
- name: geometry
|
||||
type: geometry
|
||||
- name: name
|
||||
key: name
|
||||
type: string
|
||||
- name: name_en
|
||||
key: name:en
|
||||
type: string
|
||||
- name: name_de
|
||||
key: name:de
|
||||
type: string
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- name: subclass
|
||||
type: mapping_value
|
||||
- name: mapping_key
|
||||
type: mapping_key
|
||||
- name: station
|
||||
key: station
|
||||
type: string
|
||||
- name: funicular
|
||||
key: funicular
|
||||
type: string
|
||||
- name: information
|
||||
key: information
|
||||
type: string
|
||||
- name: uic_ref
|
||||
key: uic_ref
|
||||
type: string
|
||||
- name: religion
|
||||
key: religion
|
||||
type: string
|
||||
- name: level
|
||||
key: level
|
||||
type: integer
|
||||
- name: indoor
|
||||
key: indoor
|
||||
type: bool
|
||||
- name: layer
|
||||
key: layer
|
||||
type: integer
|
||||
- name: sport
|
||||
key: sport
|
||||
type: string
|
||||
|
||||
def_poi_mapping: &poi_mapping
|
||||
aerialway: *poi_mapping_aerialway
|
||||
amenity: *poi_mapping_amenity
|
||||
barrier: *poi_mapping_barrier
|
||||
building: *poi_mapping_building
|
||||
highway: *poi_mapping_highway
|
||||
historic: *poi_mapping_historic
|
||||
landuse: *poi_mapping_landuse
|
||||
leisure: *poi_mapping_leisure
|
||||
railway: *poi_mapping_railway
|
||||
shop: *poi_mapping_shop
|
||||
sport: *poi_mapping_sport
|
||||
tourism: *poi_mapping_tourism
|
||||
waterway: *poi_mapping_waterway
|
||||
|
||||
tables:
|
||||
# etldoc: imposm3 -> osm_poi_point
|
||||
poi_point:
|
||||
type: point
|
||||
fields:
|
||||
- name: osm_id
|
||||
type: id
|
||||
- name: geometry
|
||||
type: geometry
|
||||
- name: name
|
||||
key: name
|
||||
type: string
|
||||
- name: name_en
|
||||
key: name:en
|
||||
type: string
|
||||
- name: name_de
|
||||
key: name:de
|
||||
type: string
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- name: subclass
|
||||
type: mapping_value
|
||||
- name: mapping_key
|
||||
type: mapping_key
|
||||
- name: station
|
||||
key: station
|
||||
type: string
|
||||
- name: funicular
|
||||
key: funicular
|
||||
type: string
|
||||
- name: information
|
||||
key: information
|
||||
type: string
|
||||
- name: uic_ref
|
||||
key: uic_ref
|
||||
type: string
|
||||
- name: religion
|
||||
key: religion
|
||||
type: string
|
||||
- name: level
|
||||
key: level
|
||||
type: integer
|
||||
- name: indoor
|
||||
key: indoor
|
||||
type: bool
|
||||
- name: layer
|
||||
key: layer
|
||||
type: integer
|
||||
- name: sport
|
||||
key: sport
|
||||
type: string
|
||||
mapping:
|
||||
aerialway: *poi_mapping_aerialway
|
||||
amenity: *poi_mapping_amenity
|
||||
barrier: *poi_mapping_barrier
|
||||
highway: *poi_mapping_highway
|
||||
historic: *poi_mapping_historic
|
||||
landuse: *poi_mapping_landuse
|
||||
leisure: *poi_mapping_leisure
|
||||
railway: *poi_mapping_railway
|
||||
shop: *poi_mapping_shop
|
||||
sport: *poi_mapping_sport
|
||||
tourism: *poi_mapping_tourism
|
||||
waterway: *poi_mapping_waterway
|
||||
|
||||
fields: *poi_fields
|
||||
mapping: *poi_mapping
|
||||
|
||||
# etldoc: imposm3 -> osm_poi_polygon
|
||||
poi_polygon:
|
||||
type: polygon
|
||||
fields:
|
||||
- name: osm_id
|
||||
type: id
|
||||
- name: geometry
|
||||
type: geometry
|
||||
- name: name
|
||||
key: name
|
||||
type: string
|
||||
- name: name_en
|
||||
key: name:en
|
||||
type: string
|
||||
- name: name_de
|
||||
key: name:de
|
||||
type: string
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- name: subclass
|
||||
type: mapping_value
|
||||
- name: mapping_key
|
||||
type: mapping_key
|
||||
- name: station
|
||||
key: station
|
||||
type: string
|
||||
- name: funicular
|
||||
key: funicular
|
||||
type: string
|
||||
- name: information
|
||||
key: information
|
||||
type: string
|
||||
- name: uic_ref
|
||||
key: uic_ref
|
||||
type: string
|
||||
- name: religion
|
||||
key: religion
|
||||
type: string
|
||||
- name: level
|
||||
key: level
|
||||
type: integer
|
||||
- name: indoor
|
||||
key: indoor
|
||||
type: bool
|
||||
- name: layer
|
||||
key: layer
|
||||
type: integer
|
||||
- name: sport
|
||||
key: sport
|
||||
type: string
|
||||
mapping:
|
||||
aerialway: *poi_mapping_aerialway
|
||||
amenity: *poi_mapping_amenity
|
||||
barrier: *poi_mapping_barrier
|
||||
highway: *poi_mapping_highway
|
||||
historic: *poi_mapping_historic
|
||||
landuse: *poi_mapping_landuse
|
||||
leisure: *poi_mapping_leisure
|
||||
railway: *poi_mapping_railway
|
||||
shop: *poi_mapping_shop
|
||||
sport: *poi_mapping_sport
|
||||
tourism: *poi_mapping_tourism
|
||||
waterway: *poi_mapping_waterway
|
||||
fields: *poi_fields
|
||||
mapping: *poi_mapping
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
@@ -18,15 +18,21 @@ layer:
|
||||
description: |
|
||||
Original value of either the
|
||||
[`amenity`](http://wiki.openstreetmap.org/wiki/Key:amenity),
|
||||
[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure),
|
||||
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
|
||||
[`railway`](http://wiki.openstreetmap.org/wiki/Key:railway),
|
||||
[`station`](http://wiki.openstreetmap.org/wiki/Key:station),
|
||||
[`sport`](http://wiki.openstreetmap.org/wiki/Key:sport),
|
||||
[`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism),
|
||||
[`barrier`](http://wiki.openstreetmap.org/wiki/Key:barrier),
|
||||
[`historic`](http://wiki.openstreetmap.org/wiki/Key:historic),
|
||||
[`information`](http://wiki.openstreetmap.org/wiki/Key:information),
|
||||
[`religion`](http://wiki.openstreetmap.org/wiki/Key:religion)
|
||||
or [`shop`](http://wiki.openstreetmap.org/wiki/Key:shop)
|
||||
[`landuse`](http://wiki.openstreetmap.org/wiki/Key:landuse),
|
||||
[`leisure`](http://wiki.openstreetmap.org/wiki/Key:leisure),
|
||||
[`railway`](http://wiki.openstreetmap.org/wiki/Key:railway),
|
||||
[`shop`](http://wiki.openstreetmap.org/wiki/Key:shop),
|
||||
[`sport`](http://wiki.openstreetmap.org/wiki/Key:sport),
|
||||
[`station`](http://wiki.openstreetmap.org/wiki/Key:station),
|
||||
[`religion`](http://wiki.openstreetmap.org/wiki/Key:religion),
|
||||
[`tourism`](http://wiki.openstreetmap.org/wiki/Key:tourism),
|
||||
[`aerialway`](http://wiki.openstreetmap.org/wiki/Key:aerialway),
|
||||
[`building`](http://wiki.openstreetmap.org/wiki/Key:building),
|
||||
[`highway`](http://wiki.openstreetmap.org/wiki/Key:highway)
|
||||
or [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway)
|
||||
tag. Use this to do more precise styling.
|
||||
rank: |
|
||||
The POIs are ranked ascending according to their importance within a grid. The `rank` value shows the
|
||||
|
||||
@@ -42,3 +42,13 @@ CREATE OR REPLACE FUNCTION service_value(service TEXT) RETURNS TEXT AS $$
|
||||
ELSE NULL
|
||||
END;
|
||||
$$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||
|
||||
-- Limit surface to only the most important values to ensure
|
||||
-- we always know the values of surface
|
||||
CREATE OR REPLACE FUNCTION surface_value(surface TEXT) RETURNS TEXT AS $$
|
||||
SELECT CASE
|
||||
WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'concrete', 'concrete:lanes', 'concrete:plates', 'metal', 'paving_stones', 'sett', 'unhewn_cobblestone', 'wood') THEN 'paved'
|
||||
WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'gravel_turf', 'ground', 'ice', 'mud', 'pebblestone', 'salt', 'sand', 'snow', 'woodchips') THEN 'unpaved'
|
||||
ELSE NULL
|
||||
END;
|
||||
$$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||
|
||||
@@ -8,7 +8,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||
CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int)
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text,
|
||||
ramp int, oneway int, brunnel TEXT, service TEXT, layer INT, level INT,
|
||||
indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale, surface TEXT) AS $$
|
||||
SELECT
|
||||
osm_id, geometry,
|
||||
CASE
|
||||
@@ -37,7 +37,8 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULLIF(bicycle, '') AS bicycle,
|
||||
NULLIF(foot, '') AS foot,
|
||||
NULLIF(horse, '') AS horse,
|
||||
NULLIF(mtb_scale, '') AS mtb_scale
|
||||
NULLIF(mtb_scale, '') AS mtb_scale,
|
||||
NULLIF(surface, '') AS surface
|
||||
FROM (
|
||||
-- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4
|
||||
SELECT
|
||||
@@ -49,6 +50,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
NULL AS surface,
|
||||
z_order
|
||||
FROM osm_transportation_merge_linestring_gen7
|
||||
WHERE zoom_level = 4
|
||||
@@ -64,7 +66,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_transportation_merge_linestring_gen6
|
||||
WHERE zoom_level = 5
|
||||
UNION ALL
|
||||
@@ -79,7 +81,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_transportation_merge_linestring_gen5
|
||||
WHERE zoom_level = 6
|
||||
UNION ALL
|
||||
@@ -94,7 +96,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_transportation_merge_linestring_gen4
|
||||
WHERE zoom_level = 7
|
||||
UNION ALL
|
||||
@@ -109,7 +111,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_transportation_merge_linestring_gen3
|
||||
WHERE zoom_level = 8
|
||||
UNION ALL
|
||||
@@ -125,7 +127,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
bicycle, foot, horse, mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_highway_linestring_gen2
|
||||
WHERE zoom_level BETWEEN 9 AND 10
|
||||
AND st_length(geometry)>zres(11)
|
||||
@@ -141,7 +143,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
bicycle, foot, horse, mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_highway_linestring_gen1
|
||||
WHERE zoom_level = 11
|
||||
AND st_length(geometry)>zres(12)
|
||||
@@ -163,6 +165,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
ELSE NULL::boolean
|
||||
END AS indoor,
|
||||
bicycle, foot, horse, mtb_scale,
|
||||
surface_value(surface) AS "surface",
|
||||
z_order
|
||||
FROM osm_highway_linestring
|
||||
WHERE NOT is_area AND (
|
||||
@@ -195,7 +198,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL as surface, z_order
|
||||
FROM osm_railway_linestring_gen5
|
||||
WHERE zoom_level = 8
|
||||
AND railway='rail' AND service = '' and usage='main'
|
||||
@@ -211,7 +214,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_railway_linestring_gen4
|
||||
WHERE zoom_level = 9
|
||||
AND railway='rail' AND service = '' and usage='main'
|
||||
@@ -225,7 +228,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_railway_linestring_gen3
|
||||
WHERE zoom_level = 10
|
||||
AND railway IN ('rail', 'narrow_gauge') AND service = ''
|
||||
@@ -239,7 +242,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL as surface, z_order
|
||||
FROM osm_railway_linestring_gen2
|
||||
WHERE zoom_level = 11
|
||||
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = ''
|
||||
@@ -253,7 +256,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL as surface, z_order
|
||||
FROM osm_railway_linestring_gen1
|
||||
WHERE zoom_level = 12
|
||||
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = ''
|
||||
@@ -268,7 +271,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL as surface, z_order
|
||||
FROM osm_railway_linestring
|
||||
WHERE zoom_level = 13
|
||||
AND railway IN ('rail', 'narrow_gauge', 'light_rail') AND service = ''
|
||||
@@ -283,7 +286,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_aerialway_linestring_gen1
|
||||
WHERE zoom_level = 12
|
||||
UNION ALL
|
||||
@@ -297,7 +300,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_aerialway_linestring
|
||||
WHERE zoom_level >= 13
|
||||
UNION ALL
|
||||
@@ -310,7 +313,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_shipway_linestring_gen2
|
||||
WHERE zoom_level = 11
|
||||
UNION ALL
|
||||
@@ -324,6 +327,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_shipway_linestring_gen1
|
||||
WHERE zoom_level = 12
|
||||
UNION ALL
|
||||
@@ -337,7 +341,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_shipway_linestring
|
||||
WHERE zoom_level >= 13
|
||||
UNION ALL
|
||||
@@ -358,7 +362,7 @@ indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT) AS $$
|
||||
FALSE AS is_ramp, FALSE::int AS is_oneway, man_made,
|
||||
layer, NULL::int AS level, NULL::boolean AS indoor,
|
||||
NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale,
|
||||
z_order
|
||||
NULL AS surface, z_order
|
||||
FROM osm_highway_polygon
|
||||
-- We do not want underground pedestrian areas for now
|
||||
WHERE zoom_level >= 13
|
||||
|
||||
@@ -148,6 +148,9 @@ horse_field: &horse
|
||||
mtb_scale_field: &mtb_scale
|
||||
key: mtb:scale
|
||||
name: mtb_scale
|
||||
surface_field: &surface
|
||||
key: surface
|
||||
name: surface
|
||||
type: string
|
||||
|
||||
tables:
|
||||
@@ -188,6 +191,7 @@ tables:
|
||||
- *foot
|
||||
- *horse
|
||||
- *mtb_scale
|
||||
- *surface
|
||||
mapping:
|
||||
highway:
|
||||
- motorway
|
||||
@@ -291,6 +295,7 @@ tables:
|
||||
mapping:
|
||||
aerialway:
|
||||
- cable_car
|
||||
- gondola
|
||||
|
||||
# etldoc: imposm3 -> osm_shipway_linestring
|
||||
shipway_linestring:
|
||||
|
||||
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 117 KiB |
@@ -36,6 +36,7 @@ layer:
|
||||
- rail
|
||||
- transit
|
||||
- cable_car
|
||||
- gondola
|
||||
- ferry
|
||||
- bridge
|
||||
- pier
|
||||
@@ -117,10 +118,16 @@ layer:
|
||||
mtb_scale:
|
||||
description: |
|
||||
Original value of the [`mtb:scale`](http://wiki.openstreetmap.org/wiki/Key:mtb:scale) tag (highways only).
|
||||
surface:
|
||||
description: |
|
||||
Values of [`surface`](https://wiki.openstreetmap.org/wiki/Key:surface) tag devided into 2 groups `paved` (paved, asphalt, cobblestone, concrete, concrete:lanes, concrete:plates, metal, paving_stones, sett, unhewn_cobblestone, wood) and `unpaved` (unpaved, compacted, dirt, earth, fine_gravel, grass, grass_paver, gravel, gravel_turf, ground, ice, mud, pebblestone, salt, sand, snow, woodchips).
|
||||
values:
|
||||
- paved
|
||||
- unpaved
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
srid: 900913
|
||||
query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, bicycle, foot, horse, mtb_scale FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t
|
||||
query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, bicycle, foot, horse, mtb_scale, surface FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t
|
||||
schema:
|
||||
- ./class.sql
|
||||
- ./update_transportation_merge.sql
|
||||
|
||||
@@ -69,6 +69,9 @@ tables:
|
||||
- name: waterway
|
||||
key: waterway
|
||||
type: string
|
||||
- name: is_intermittent
|
||||
key: intermittent
|
||||
type: bool
|
||||
filters:
|
||||
reject:
|
||||
covered: ["yes"]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
CREATE OR REPLACE FUNCTION water_class(waterway TEXT) RETURNS TEXT AS $$
|
||||
SELECT CASE
|
||||
WHEN waterway='' THEN 'lake'
|
||||
WHEN waterway='lake' THEN 'lake'
|
||||
WHEN waterway='dock' THEN 'dock'
|
||||
ELSE 'river'
|
||||
END;
|
||||
@@ -10,122 +11,131 @@ $$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
CREATE OR REPLACE VIEW water_z0 AS (
|
||||
-- etldoc: ne_110m_ocean -> water_z0
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: ne_110m_lakes -> water_z0
|
||||
SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes
|
||||
SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_lakes
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z1 AS (
|
||||
-- etldoc: ne_110m_ocean -> water_z1
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: ne_110m_lakes -> water_z1
|
||||
SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes
|
||||
SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_110m_lakes
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z2 AS (
|
||||
-- etldoc: ne_50m_ocean -> water_z2
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: ne_50m_lakes -> water_z2
|
||||
SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes
|
||||
SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_lakes
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z4 AS (
|
||||
-- etldoc: ne_50m_ocean -> water_z4
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: ne_50m_lakes -> water_z4
|
||||
SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes
|
||||
SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_50m_lakes
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z5 AS (
|
||||
-- etldoc: ne_10m_ocean -> water_z5
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: ne_10m_lakes -> water_z5
|
||||
SELECT geometry, 'lake'::text AS class FROM ne_10m_lakes
|
||||
SELECT geometry, 'lake'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_lakes
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z6 AS (
|
||||
-- etldoc: ne_10m_ocean -> water_z6
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen6 -> water_z6
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen6
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen6
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z7 AS (
|
||||
-- etldoc: ne_10m_ocean -> water_z7
|
||||
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM ne_10m_ocean
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen5 -> water_z7
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen5
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen5
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z8 AS (
|
||||
-- etldoc: osm_ocean_polygon_gen4 -> water_z8
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen4
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen4
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen4 -> water_z8
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen4
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen4
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z9 AS (
|
||||
-- etldoc: osm_ocean_polygon_gen3 -> water_z9
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen3
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen3
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen3 -> water_z9
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen3
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen3
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z10 AS (
|
||||
-- etldoc: osm_ocean_polygon_gen2 -> water_z10
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen2
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen2
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen2 -> water_z10
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen2
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen2
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z11 AS (
|
||||
-- etldoc: osm_ocean_polygon_gen1 -> water_z11
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen1
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon_gen1
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon_gen1 -> water_z11
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen1
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon_gen1
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z12 AS (
|
||||
-- etldoc: osm_ocean_polygon_gen1 -> water_z12
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon -> water_z12
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z13 AS (
|
||||
-- etldoc: osm_ocean_polygon -> water_z13
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon -> water_z13
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW water_z14 AS (
|
||||
-- etldoc: osm_ocean_polygon -> water_z14
|
||||
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
|
||||
SELECT geometry, 'ocean'::text AS class, NULL::boolean AS is_intermittent FROM osm_ocean_polygon
|
||||
UNION ALL
|
||||
-- etldoc: osm_water_polygon -> water_z14
|
||||
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon
|
||||
SELECT geometry, water_class(waterway) AS class, is_intermittent FROM osm_water_polygon
|
||||
WHERE "natural" != 'bay'
|
||||
);
|
||||
|
||||
-- etldoc: layer_water [shape=record fillcolor=lightpink, style="rounded,filled",
|
||||
-- etldoc: label="layer_water |<z0> 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)
|
||||
RETURNS TABLE(geometry geometry, class text) AS $$
|
||||
SELECT geometry, class::text FROM (
|
||||
RETURNS TABLE(geometry geometry, class text, intermittent int) AS $$
|
||||
SELECT geometry, class::text, is_intermittent::int AS intermittent FROM (
|
||||
-- etldoc: water_z0 -> layer_water:z0
|
||||
SELECT * FROM water_z0 WHERE zoom_level = 0
|
||||
UNION ALL
|
||||
|
||||
@@ -4,22 +4,26 @@ layer:
|
||||
Water polygons representing oceans and lakes. Covered watered areas are excluded (`covered=yes`).
|
||||
On low zoom levels all water originates from Natural Earth. To get a more correct display of the south pole you should also
|
||||
style the covering ice shelves over the water.
|
||||
On higher zoom levels water polygons from [OpenStreetMapData](http://openstreetmapdata.com/) are used.
|
||||
On higher zoom levels water polygons from [OpenStreetMapData](http://osmdata.openstreetmap.de/) are used.
|
||||
The polygons are split into many smaller polygons to improve rendering performance.
|
||||
This however can lead to less rendering options in clients since these boundaries show up. So you might not be
|
||||
able to use border styling for ocean water features.
|
||||
fields:
|
||||
class:
|
||||
description: |
|
||||
All water polygons from [OpenStreetMapData](http://openstreetmapdata.com/) have the class `ocean`.
|
||||
All water polygons from [OpenStreetMapData](http://osmdata.openstreetmap.de/) have the class `ocean`.
|
||||
Water bodies are classified as `lake` or `river` for water bodies with the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag.
|
||||
values:
|
||||
- ocean
|
||||
- lake
|
||||
- river
|
||||
intermittent:
|
||||
description: |
|
||||
Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) water polygon.
|
||||
values: [0, 1]
|
||||
buffer_size: 4
|
||||
datasource:
|
||||
query: (SELECT geometry, class FROM layer_water(!bbox!, z(!scale_denominator!))) AS t
|
||||
query: (SELECT geometry, class, intermittent FROM layer_water(!bbox!, z(!scale_denominator!))) AS t
|
||||
schema:
|
||||
- ./water.sql
|
||||
datasources:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
-- 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)
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, class text) AS $$
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, class text, intermittent int) AS $$
|
||||
-- etldoc: osm_water_lakeline -> layer_water_name:z9_13
|
||||
-- etldoc: osm_water_lakeline -> layer_water_name:z14_
|
||||
SELECT
|
||||
@@ -14,7 +14,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'lake'::text AS class
|
||||
'lake'::text AS class,
|
||||
is_intermittent::int AS intermittent
|
||||
FROM osm_water_lakeline
|
||||
WHERE geometry && bbox
|
||||
AND ((zoom_level BETWEEN 9 AND 13 AND LineLabel(zoom_level, NULLIF(name, ''), geometry))
|
||||
@@ -30,7 +31,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'lake'::text AS class
|
||||
'lake'::text AS class,
|
||||
is_intermittent::int AS intermittent
|
||||
FROM osm_water_point
|
||||
WHERE geometry && bbox AND (
|
||||
(zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level))
|
||||
@@ -44,7 +46,8 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
place::text AS class
|
||||
place::text AS class,
|
||||
is_intermittent::int AS intermittent
|
||||
FROM osm_marine_point
|
||||
WHERE geometry && bbox AND (
|
||||
place = 'ocean'
|
||||
|
||||
@@ -24,6 +24,9 @@ tables:
|
||||
- name: rank
|
||||
key: rank
|
||||
type: integer
|
||||
- name: is_intermittent
|
||||
key: intermittent
|
||||
type: bool
|
||||
filters:
|
||||
require:
|
||||
name: ["__any__"]
|
||||
|
||||
@@ -12,7 +12,7 @@ BEGIN
|
||||
-- etldoc: osm_marine_point -> osm_marine_point
|
||||
|
||||
WITH important_marine_point AS (
|
||||
SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank
|
||||
SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, osm.is_intermittent
|
||||
FROM ne_10m_geography_marine_polys AS ne, osm_marine_point AS osm
|
||||
WHERE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.name
|
||||
OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:en'
|
||||
|
||||
@@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS (
|
||||
ll.wkb_geometry AS geometry,
|
||||
name, name_en, name_de,
|
||||
update_tags(tags, ll.wkb_geometry) AS tags,
|
||||
ST_Area(wp.geometry) AS area
|
||||
ST_Area(wp.geometry) AS area,
|
||||
is_intermittent
|
||||
FROM osm_water_polygon AS wp
|
||||
INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
|
||||
WHERE wp.name <> '' AND ST_IsValid(wp.geometry)
|
||||
|
||||
@@ -10,7 +10,8 @@ CREATE MATERIALIZED VIEW osm_water_point AS (
|
||||
wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry,
|
||||
wp.name, wp.name_en, wp.name_de,
|
||||
update_tags(wp.tags, ST_PointOnSurface(wp.geometry)) AS tags,
|
||||
ST_Area(wp.geometry) AS area
|
||||
ST_Area(wp.geometry) AS area,
|
||||
wp.is_intermittent
|
||||
FROM osm_water_polygon AS wp
|
||||
LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
|
||||
WHERE ll.osm_id IS NULL AND wp.name <> ''
|
||||
|
||||
@@ -13,6 +13,10 @@ layer:
|
||||
At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*.
|
||||
values:
|
||||
- lake
|
||||
intermittent:
|
||||
description: |
|
||||
Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) lake.
|
||||
values: [0, 1]
|
||||
buffer_size: 256
|
||||
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
|
||||
datasource:
|
||||
@@ -20,7 +24,7 @@ layer:
|
||||
key_field: osm_id
|
||||
key_field_as_attribute: no
|
||||
srid: 900913
|
||||
query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t
|
||||
query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, intermittent FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t
|
||||
schema:
|
||||
- ./update_marine_point.sql
|
||||
- ./update_water_lakeline.sql
|
||||
|
||||
@@ -49,6 +49,9 @@ tables:
|
||||
type: hstore_tags
|
||||
- *tunnel
|
||||
- *bridge
|
||||
- name: is_intermittent
|
||||
key: intermittent
|
||||
type: bool
|
||||
mapping:
|
||||
waterway:
|
||||
- stream
|
||||
|
||||
@@ -8,60 +8,60 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||
|
||||
-- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3
|
||||
CREATE OR REPLACE VIEW waterway_z3 AS (
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM ne_110m_rivers_lake_centerlines
|
||||
WHERE featurecla = 'River'
|
||||
);
|
||||
|
||||
-- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4
|
||||
CREATE OR REPLACE VIEW waterway_z4 AS (
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM ne_50m_rivers_lake_centerlines
|
||||
WHERE featurecla = 'River'
|
||||
);
|
||||
|
||||
-- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6
|
||||
CREATE OR REPLACE VIEW waterway_z6 AS (
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de, NULL::hstore AS tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM ne_10m_rivers_lake_centerlines
|
||||
WHERE featurecla = 'River'
|
||||
);
|
||||
|
||||
-- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9
|
||||
CREATE OR REPLACE VIEW waterway_z9 AS (
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM osm_important_waterway_linestring_gen3
|
||||
);
|
||||
|
||||
-- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10
|
||||
CREATE OR REPLACE VIEW waterway_z10 AS (
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM osm_important_waterway_linestring_gen2
|
||||
);
|
||||
|
||||
-- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11
|
||||
CREATE OR REPLACE VIEW waterway_z11 AS (
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel
|
||||
SELECT geometry, 'river'::text AS class, name, name_en, name_de, tags, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_intermittent
|
||||
FROM osm_important_waterway_linestring_gen1
|
||||
);
|
||||
|
||||
-- etldoc: osm_waterway_linestring -> waterway_z12
|
||||
CREATE OR REPLACE VIEW waterway_z12 AS (
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent
|
||||
FROM osm_waterway_linestring
|
||||
WHERE waterway IN ('river', 'canal')
|
||||
);
|
||||
|
||||
-- etldoc: osm_waterway_linestring -> waterway_z13
|
||||
CREATE OR REPLACE VIEW waterway_z13 AS (
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent
|
||||
FROM osm_waterway_linestring
|
||||
WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch')
|
||||
);
|
||||
|
||||
-- etldoc: osm_waterway_linestring -> waterway_z14
|
||||
CREATE OR REPLACE VIEW waterway_z14 AS (
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel
|
||||
SELECT geometry, waterway::text AS class, name, name_en, name_de, tags, is_bridge, is_tunnel, is_intermittent
|
||||
FROM osm_waterway_linestring
|
||||
);
|
||||
|
||||
@@ -69,12 +69,13 @@ CREATE OR REPLACE VIEW waterway_z14 AS (
|
||||
-- etldoc: label="layer_waterway | <z3> 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)
|
||||
RETURNS TABLE(geometry geometry, class text, name text, name_en text, name_de text, brunnel text, tags hstore) AS $$
|
||||
RETURNS TABLE(geometry geometry, class text, name text, name_en text, name_de text, brunnel text, intermittent int, tags hstore) AS $$
|
||||
SELECT geometry, class,
|
||||
NULLIF(name, '') AS name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
waterway_brunnel(is_bridge, is_tunnel) AS brunnel,
|
||||
is_intermittent::int AS intermittent,
|
||||
tags
|
||||
FROM (
|
||||
-- etldoc: waterway_z3 -> layer_waterway:z3
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
layer:
|
||||
id: "waterway"
|
||||
description: |
|
||||
OpenStreetMap [waterways](http://wiki.openstreetmap.org/wiki/Waterways) for higher zoom levels
|
||||
OpenStreetMap [waterways](https://wiki.openstreetmap.org/wiki/Waterways) for higher zoom levels
|
||||
and Natural Earth rivers and lake centerlines for low zoom levels.
|
||||
Linestrings without a name or which are too short are filtered
|
||||
out at low zoom levels. Waterways do no not have a `subclass` field.
|
||||
@@ -27,9 +27,13 @@ layer:
|
||||
values:
|
||||
- bridge
|
||||
- tunnel
|
||||
intermittent:
|
||||
description: |
|
||||
Mark with `1` if it is an [intermittent](http://wiki.openstreetmap.org/wiki/Key:intermittent) waterway.
|
||||
values: [0, 1]
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, brunnel FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t
|
||||
query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, brunnel, intermittent FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t
|
||||
schema:
|
||||
- ./update_waterway_linestring.sql
|
||||
- ./update_important_waterway.sql
|
||||
|
||||