diff --git a/layers/transportation/layer.sql b/layers/transportation/layer.sql index ac76f8e7..2ff89973 100644 --- a/layers/transportation/layer.sql +++ b/layers/transportation/layer.sql @@ -220,9 +220,9 @@ FROM ( NULL AS shipway, NULL AS public_transport, NULL AS service, - NULL::boolean AS is_bridge, - NULL::boolean AS is_tunnel, - NULL::boolean AS is_ford, + is_bridge, + is_tunnel, + is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL AS man_made, @@ -250,9 +250,9 @@ FROM ( NULL AS shipway, NULL AS public_transport, NULL AS service, - NULL::boolean AS is_bridge, - NULL::boolean AS is_tunnel, - NULL::boolean AS is_ford, + is_bridge, + is_tunnel, + is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL AS man_made, diff --git a/layers/transportation_name/layer.sql b/layers/transportation_name/layer.sql index 0cf23f6a..9a282814 100644 --- a/layers/transportation_name/layer.sql +++ b/layers/transportation_name/layer.sql @@ -15,6 +15,7 @@ CREATE OR REPLACE FUNCTION layer_transportation_name(bbox geometry, zoom_level i network text, class text, subclass text, + brunnel text, layer int, level int, indoor int @@ -41,6 +42,7 @@ SELECT osm_id, WHEN highway IS NOT NULL AND highway_class(highway, '', construction) = 'path' THEN highway END AS subclass, + brunnel, NULLIF(layer, 0) AS layer, "level", CASE WHEN indoor = TRUE THEN 1 END AS indoor @@ -94,6 +96,7 @@ FROM ( ref, highway, construction, + brunnel, network, z_order, layer, @@ -116,6 +119,7 @@ FROM ( ref, highway, construction, + brunnel, network, z_order, layer, @@ -137,6 +141,7 @@ FROM ( ref, highway, construction, + brunnel, network, z_order, layer, diff --git a/layers/transportation_name/transportation_name.yaml b/layers/transportation_name/transportation_name.yaml index 975769ba..9501f523 100644 --- a/layers/transportation_name/transportation_name.yaml +++ b/layers/transportation_name/transportation_name.yaml @@ -69,6 +69,13 @@ layer: - bridleway - corridor - platform + brunnel: + description: | + Mark whether way is a bridge, a tunnel or a ford. + values: + - bridge + - tunnel + - ford level: description: | Experimental feature! Filled only for steps and footways. Original @@ -86,7 +93,7 @@ layer: datasource: geometry_field: geometry srid: 900913 - query: (SELECT geometry, name, name_en, name_de, {name_languages}, ref, ref_length, network::text, class::text, subclass, layer, level, indoor FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, name, name_en, name_de, {name_languages}, ref, ref_length, network::text, class::text, subclass, brunnel, layer, level, indoor FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t schema: - ./network_type.sql - ./update_route_member.sql diff --git a/layers/transportation_name/update_transportation_name.sql b/layers/transportation_name/update_transportation_name.sql index 35cc2365..d50cc56a 100644 --- a/layers/transportation_name/update_transportation_name.sql +++ b/layers/transportation_name/update_transportation_name.sql @@ -17,6 +17,7 @@ SELECT ref, highway, construction, + brunnel, "level", layer, indoor, @@ -37,6 +38,7 @@ FROM ( END AS ref, hl.highway, hl.construction, + brunnel(hl.is_bridge, hl.is_tunnel, hl.is_ford) AS brunnel, CASE WHEN highway IN ('footway', 'steps') THEN layer END AS layer, CASE WHEN highway IN ('footway', 'steps') THEN level END AS level, CASE WHEN highway IN ('footway', 'steps') THEN indoor END AS indoor, @@ -66,6 +68,7 @@ SELECT (ST_Dump(geometry)).geom AS geometry, ref, highway, construction, + brunnel, "level", layer, indoor, @@ -81,13 +84,14 @@ FROM ( ref, highway, construction, + brunnel, "level", layer, indoor, network_type, min(z_order) AS z_order FROM osm_transportation_name_network - GROUP BY name, name_en, name_de, tags, ref, highway, construction, "level", layer, indoor, network_type + GROUP BY name, name_en, name_de, tags, ref, highway, construction, brunnel, "level", layer, indoor, network_type ) AS highway_union ; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_name_ref_idx ON osm_transportation_name_linestring (coalesce(name, ''), coalesce(ref, '')); @@ -108,6 +112,7 @@ SELECT ST_Simplify(geometry, 50) AS geometry, ref, highway, construction, + brunnel, network, z_order FROM osm_transportation_name_linestring @@ -135,6 +140,7 @@ SELECT ST_Simplify(geometry, 120) AS geometry, ref, highway, construction, + brunnel, network, z_order FROM osm_transportation_name_linestring_gen1 @@ -162,6 +168,7 @@ SELECT ST_Simplify(geometry, 200) AS geometry, ref, highway, construction, + brunnel, network, z_order FROM osm_transportation_name_linestring_gen2 @@ -189,6 +196,7 @@ SELECT ST_Simplify(geometry, 500) AS geometry, ref, highway, construction, + brunnel, network, z_order FROM osm_transportation_name_linestring_gen3 @@ -275,6 +283,7 @@ BEGIN ref, highway, construction, + brunnel, level, layer, indoor, @@ -295,6 +304,7 @@ BEGIN END AS ref, hl.highway, hl.construction, + brunnel(hl.is_bridge, hl.is_tunnel, hl.is_ford) AS brunnel, CASE WHEN highway IN ('footway', 'steps') THEN layer END AS layer, CASE WHEN highway IN ('footway', 'steps') THEN level END AS level, CASE WHEN highway IN ('footway', 'steps') THEN indoor END AS indoor, @@ -360,6 +370,7 @@ CREATE TABLE IF NOT EXISTS transportation_name.name_changes ref character varying, highway character varying, construction character varying, + brunnel character varying, level integer, layer integer, indoor boolean, @@ -372,16 +383,16 @@ BEGIN IF (tg_op IN ('DELETE', 'UPDATE')) THEN INSERT INTO transportation_name.name_changes(is_old, osm_id, name, name_en, name_de, ref, highway, construction, - level, layer, indoor, network_type) - VALUES (TRUE, old.osm_id, old.name, old.name_en, old.name_de, old.ref, old.highway, old.construction, old.level, - old.layer, old.indoor, old.network_type); + brunnel, level, layer, indoor, network_type) + VALUES (TRUE, old.osm_id, old.name, old.name_en, old.name_de, old.ref, old.highway, old.construction, + old.brunnel, old.level, old.layer, old.indoor, old.network_type); END IF; IF (tg_op IN ('UPDATE', 'INSERT')) THEN INSERT INTO transportation_name.name_changes(is_old, osm_id, name, name_en, name_de, ref, highway, construction, - level, layer, indoor, network_type) - VALUES (FALSE, new.osm_id, new.name, new.name_en, new.name_de, new.ref, new.highway, new.construction, new.level, - new.layer, new.indoor, new.network_type); + brunnel, level, layer, indoor, network_type) + VALUES (FALSE, new.osm_id, new.name, new.name_en, new.name_de, new.ref, new.highway, new.construction, + new.brunnel, new.level, new.layer, new.indoor, new.network_type); END IF; RETURN NULL; END; @@ -412,13 +423,14 @@ BEGIN -- Compact the change history to keep only the first and last version, and then uniq version of row CREATE TEMP TABLE name_changes_compact AS - SELECT DISTINCT ON (name, name_en, name_de, ref, highway, construction, level, layer, indoor, network_type) + SELECT DISTINCT ON (name, name_en, name_de, ref, highway, construction, brunnel, level, layer, indoor, network_type) name, name_en, name_de, ref, highway, construction, + brunnel, level, layer, indoor, @@ -449,6 +461,7 @@ BEGIN AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel AND n.level IS NOT DISTINCT FROM c.level AND n.layer IS NOT DISTINCT FROM c.layer AND n.indoor IS NOT DISTINCT FROM c.indoor @@ -464,6 +477,7 @@ BEGIN ref, highway, construction, + brunnel, level, layer, indoor, @@ -480,6 +494,7 @@ BEGIN n.ref, n.highway, n.construction, + n.brunnel, n.level, n.layer, n.indoor, @@ -493,68 +508,125 @@ BEGIN AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel AND n.level IS NOT DISTINCT FROM c.level AND n.layer IS NOT DISTINCT FROM c.layer AND n.indoor IS NOT DISTINCT FROM c.indoor AND n.network_type IS NOT DISTINCT FROM c.network_type - GROUP BY n.name, n.name_en, n.name_de, n.ref, n.highway, n.construction, n.level, n.layer, n.indoor, n.network_type + GROUP BY n.name, n.name_en, n.name_de, n.ref, n.highway, n.construction, n.brunnel, n.level, n.layer, n.indoor, n.network_type ) AS highway_union; -- REFRESH osm_transportation_name_linestring_gen1 DELETE FROM osm_transportation_name_linestring_gen1 AS n USING name_changes_compact AS c WHERE - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; INSERT INTO osm_transportation_name_linestring_gen1 SELECT n.* FROM osm_transportation_name_linestring_gen1_view AS n JOIN name_changes_compact AS c ON - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; -- REFRESH osm_transportation_name_linestring_gen2 DELETE FROM osm_transportation_name_linestring_gen2 AS n USING name_changes_compact AS c WHERE - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; INSERT INTO osm_transportation_name_linestring_gen2 SELECT n.* FROM osm_transportation_name_linestring_gen2_view AS n JOIN name_changes_compact AS c ON - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; -- REFRESH osm_transportation_name_linestring_gen3 DELETE FROM osm_transportation_name_linestring_gen3 AS n USING name_changes_compact AS c WHERE - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; INSERT INTO osm_transportation_name_linestring_gen3 SELECT n.* FROM osm_transportation_name_linestring_gen3_view AS n JOIN name_changes_compact AS c ON - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; -- REFRESH osm_transportation_name_linestring_gen4 DELETE FROM osm_transportation_name_linestring_gen4 AS n USING name_changes_compact AS c WHERE - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; INSERT INTO osm_transportation_name_linestring_gen4 SELECT n.* FROM osm_transportation_name_linestring_gen4_view AS n JOIN name_changes_compact AS c ON - coalesce(n.name, n.ref) = c.name_ref AND - n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type; + coalesce(n.name, n.ref) = c.name_ref + AND n.name IS NOT DISTINCT FROM c.name + AND n.name_en IS NOT DISTINCT FROM c.name_en + AND n.name_de IS NOT DISTINCT FROM c.name_de + AND n.ref IS NOT DISTINCT FROM c.ref + AND n.highway IS NOT DISTINCT FROM c.highway + AND n.construction IS NOT DISTINCT FROM c.construction + AND n.brunnel IS NOT DISTINCT FROM c.brunnel + AND n.network IS NOT DISTINCT FROM c.network_type; DROP TABLE name_changes_compact; DELETE FROM transportation_name.name_changes;