Add intermittent field to water* layers (#430 PR #585)

pull/640/head
zstadler 2019-05-24 11:21:43 +00:00 zatwierdzone przez Martin Mikita
rodzic 8424f01be9
commit 7a3ac079ae
12 zmienionych plików z 78 dodań i 51 usunięć

Wyświetl plik

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

Wyświetl plik

@ -11,122 +11,122 @@ $$ 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'
);
@ -134,8 +134,8 @@ CREATE OR REPLACE VIEW water_z14 AS (
-- 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

Wyświetl plik

@ -17,9 +17,13 @@ layer:
- 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:

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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