layers/transportation/: differentiate roads under construction (#321)

This commit is contained in:
golubev 2019-10-04 13:08:49 +03:00
parent 45a50a5bd0
commit 0636466cfd
4 changed files with 63 additions and 45 deletions

View File

@ -9,7 +9,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
-- The classes for highways are derived from the classes used in ClearTables -- The classes for highways are derived from the classes used in ClearTables
-- https://github.com/ClearTables/ClearTables/blob/master/transportation.lua -- https://github.com/ClearTables/ClearTables/blob/master/transportation.lua
CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT) RETURNS TEXT AS $$ CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT, construction TEXT) RETURNS TEXT AS $$
SELECT CASE SELECT CASE
WHEN highway IN ('motorway', 'motorway_link') THEN 'motorway' WHEN highway IN ('motorway', 'motorway_link') THEN 'motorway'
WHEN highway IN ('trunk', 'trunk_link') THEN 'trunk' WHEN highway IN ('trunk', 'trunk_link') THEN 'trunk'
@ -18,7 +18,18 @@ CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT) RE
WHEN highway IN ('tertiary', 'tertiary_link') THEN 'tertiary' WHEN highway IN ('tertiary', 'tertiary_link') THEN 'tertiary'
WHEN highway IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor' WHEN highway IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor'
WHEN highway IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR public_transport IN ('platform') THEN 'path' WHEN highway IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR public_transport IN ('platform') THEN 'path'
WHEN highway IN ('service', 'track', 'raceway', 'construction') THEN highway WHEN highway IN ('service', 'track', 'raceway') THEN highway
WHEN highway = 'construction' THEN CASE
WHEN construction IN ('motorway', 'motorway_link') THEN 'motorway_construction'
WHEN construction IN ('trunk', 'trunk_link') THEN 'trunk_construction'
WHEN construction IN ('primary', 'primary_link') THEN 'primary_construction'
WHEN construction IN ('secondary', 'secondary_link') THEN 'secondary_construction'
WHEN construction IN ('tertiary', 'tertiary_link') THEN 'tertiary_construction'
WHEN construction IS NULL OR construction IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor_construction'
WHEN construction IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR public_transport IN ('platform') THEN 'path_construction'
WHEN construction IN ('service', 'track', 'raceway') THEN CONCAT(highway, '_construction')
ELSE NULL
END
ELSE NULL ELSE NULL
END; END;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -12,7 +12,7 @@ indoor INT, surface TEXT) AS $$
SELECT SELECT
osm_id, geometry, osm_id, geometry,
CASE CASE
WHEN NULLIF(highway, '') IS NOT NULL OR NULLIF(public_transport, '') IS NOT NULL THEN highway_class(highway, public_transport) WHEN NULLIF(highway, '') IS NOT NULL OR NULLIF(public_transport, '') IS NOT NULL THEN highway_class(highway, public_transport, construction)
WHEN NULLIF(railway, '') IS NOT NULL THEN railway_class(railway) WHEN NULLIF(railway, '') IS NOT NULL THEN railway_class(railway)
WHEN NULLIF(aerialway, '') IS NOT NULL THEN aerialway WHEN NULLIF(aerialway, '') IS NOT NULL THEN aerialway
WHEN NULLIF(shipway, '') IS NOT NULL THEN shipway WHEN NULLIF(shipway, '') IS NOT NULL THEN shipway
@ -21,7 +21,7 @@ indoor INT, surface TEXT) AS $$
CASE CASE
WHEN railway IS NOT NULL THEN railway WHEN railway IS NOT NULL THEN railway
WHEN (highway IS NOT NULL OR public_transport IS NOT NULL) WHEN (highway IS NOT NULL OR public_transport IS NOT NULL)
AND highway_class(highway, public_transport) = 'path' AND highway_class(highway, public_transport, construction) = 'path'
THEN COALESCE(NULLIF(public_transport, ''), highway) THEN COALESCE(NULLIF(public_transport, ''), highway)
ELSE NULL ELSE NULL
END AS subclass, END AS subclass,
@ -39,7 +39,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4 -- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -54,7 +54,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_transportation_merge_linestring_gen6 -> layer_transportation:z5 -- etldoc: osm_transportation_merge_linestring_gen6 -> layer_transportation:z5
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -68,7 +68,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_transportation_merge_linestring_gen5 -> layer_transportation:z6 -- etldoc: osm_transportation_merge_linestring_gen5 -> layer_transportation:z6
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -82,7 +82,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_transportation_merge_linestring_gen4 -> layer_transportation:z7 -- etldoc: osm_transportation_merge_linestring_gen4 -> layer_transportation:z7
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -96,7 +96,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_transportation_merge_linestring_gen3 -> layer_transportation:z8 -- etldoc: osm_transportation_merge_linestring_gen3 -> layer_transportation:z8
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -111,7 +111,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_highway_linestring_gen2 -> layer_transportation:z10 -- etldoc: osm_highway_linestring_gen2 -> layer_transportation:z10
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -126,7 +126,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_highway_linestring_gen1 -> layer_transportation:z11 -- etldoc: osm_highway_linestring_gen1 -> layer_transportation:z11
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, NULL AS service, NULL AS public_transport, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -143,7 +143,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_highway_linestring -> layer_transportation:z14_ -- etldoc: osm_highway_linestring -> layer_transportation:z14_
SELECT SELECT
osm_id, geometry, osm_id, geometry,
highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway,
public_transport, service_value(service) AS service, public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, man_made,
layer, layer,
@ -158,12 +158,12 @@ indoor INT, surface TEXT) AS $$
FROM osm_highway_linestring FROM osm_highway_linestring
WHERE NOT is_area AND ( WHERE NOT is_area AND (
zoom_level = 12 AND ( zoom_level = 12 AND (
highway_class(highway, public_transport) NOT IN ('track', 'path', 'minor') highway_class(highway, public_transport, construction) NOT IN ('track', 'path', 'minor')
OR highway IN ('unclassified', 'residential') OR highway IN ('unclassified', 'residential')
) AND man_made <> 'pier' ) AND man_made <> 'pier'
OR zoom_level = 13 OR zoom_level = 13
AND ( AND (
highway_class(highway, public_transport) NOT IN ('track', 'path') AND man_made <> 'pier' highway_class(highway, public_transport, construction) NOT IN ('track', 'path') AND man_made <> 'pier'
OR OR
man_made = 'pier' AND NOT ST_IsClosed(geometry) man_made = 'pier' AND NOT ST_IsClosed(geometry)
) )
@ -179,7 +179,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring_gen5 -> layer_transportation:z8 -- etldoc: osm_railway_linestring_gen5 -> layer_transportation:z8
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -194,7 +194,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring_gen4 -> layer_transportation:z9 -- etldoc: osm_railway_linestring_gen4 -> layer_transportation:z9
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
@ -209,7 +209,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring_gen3 -> layer_transportation:z10 -- etldoc: osm_railway_linestring_gen3 -> layer_transportation:z10
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -222,7 +222,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring_gen2 -> layer_transportation:z11 -- etldoc: osm_railway_linestring_gen2 -> layer_transportation:z11
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -235,7 +235,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring_gen1 -> layer_transportation:z12 -- etldoc: osm_railway_linestring_gen1 -> layer_transportation:z12
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -249,7 +249,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_railway_linestring -> layer_transportation:z14_ -- etldoc: osm_railway_linestring -> layer_transportation:z14_
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -263,7 +263,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_aerialway_linestring_gen1 -> layer_transportation:z12 -- etldoc: osm_aerialway_linestring_gen1 -> layer_transportation:z12
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, NULL as railway, aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, NULL as railway, aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -276,7 +276,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_aerialway_linestring -> layer_transportation:z14_ -- etldoc: osm_aerialway_linestring -> layer_transportation:z14_
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, NULL as railway, aerialway, NULL AS shipway, NULL AS highway, NULL AS construction, NULL as railway, aerialway, NULL AS shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -288,7 +288,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_shipway_linestring_gen2 -> layer_transportation:z11 -- etldoc: osm_shipway_linestring_gen2 -> layer_transportation:z11
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -300,7 +300,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_shipway_linestring_gen1 -> layer_transportation:z12 -- etldoc: osm_shipway_linestring_gen1 -> layer_transportation:z12
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,
@ -313,7 +313,7 @@ indoor INT, surface TEXT) AS $$
-- etldoc: osm_shipway_linestring -> layer_transportation:z14_ -- etldoc: osm_shipway_linestring -> layer_transportation:z14_
SELECT SELECT
osm_id, geometry, osm_id, geometry,
NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway,
NULL AS public_transport, service_value(service) AS service, NULL AS public_transport, service_value(service) AS service,
is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made,
layer, NULL::int AS level, NULL::boolean AS indoor, layer, NULL::int AS level, NULL::boolean AS indoor,

View File

@ -45,13 +45,13 @@ generalized_tables:
# etldoc: imposm3 -> osm_highway_linestring_gen2 # etldoc: imposm3 -> osm_highway_linestring_gen2
highway_linestring_gen2: highway_linestring_gen2:
source: highway_linestring_gen1 source: highway_linestring_gen1
sql_filter: highway IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link') AND NOT is_area sql_filter: (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link') OR highway = 'construction' AND construction IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link')) AND NOT is_area
tolerance: ZRES11 tolerance: ZRES11
# etldoc: imposm3 -> osm_highway_linestring_gen1 # etldoc: imposm3 -> osm_highway_linestring_gen1
highway_linestring_gen1: highway_linestring_gen1:
source: highway_linestring source: highway_linestring
sql_filter: highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') AND NOT is_area AND ST_IsValid(geometry) sql_filter: (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') OR highway = 'construction' AND construction IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link')) AND NOT is_area AND ST_IsValid(geometry)
tolerance: ZRES12 tolerance: ZRES12
name_field: &name name_field: &name
@ -150,6 +150,9 @@ tables:
- name: highway - name: highway
key: highway key: highway
type: string type: string
- name: construction
key: construction
type: string
- *ref - *ref
- *network - *network
- *z_order - *z_order

View File

@ -22,14 +22,14 @@ CREATE INDEX IF NOT EXISTS osm_highway_linestring_highway_idx
-- Improve performance of the sql below -- Improve performance of the sql below
CREATE INDEX IF NOT EXISTS osm_highway_linestring_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_highway_linestring_highway_partial_idx
ON osm_highway_linestring(highway) ON osm_highway_linestring(highway)
WHERE highway IN ('motorway','trunk', 'primary'); WHERE highway IN ('motorway','trunk', 'primary', 'construction');
-- etldoc: osm_highway_linestring -> osm_transportation_merge_linestring -- etldoc: osm_highway_linestring -> osm_transportation_merge_linestring
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring AS (
SELECT SELECT
(ST_Dump(geometry)).geom AS geometry, (ST_Dump(geometry)).geom AS geometry,
NULL::bigint AS osm_id, NULL::bigint AS osm_id,
highway, highway, construction,
z_order z_order
FROM ( FROM (
SELECT SELECT
@ -37,7 +37,8 @@ CREATE MATERIALIZED VIEW osm_transportation_merge_linestring AS (
highway, highway,
min(z_order) AS z_order min(z_order) AS z_order
FROM osm_highway_linestring FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk', 'primary') AND ST_IsValid(geometry) WHERE (highway IN ('motorway','trunk', 'primary') OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary'))
AND ST_IsValid(geometry)
group by highway group by highway
) AS highway_union ) AS highway_union
); );
@ -45,61 +46,64 @@ CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_geometry_idx
ON osm_transportation_merge_linestring USING gist(geometry); ON osm_transportation_merge_linestring USING gist(geometry);
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_highway_partial_idx
ON osm_transportation_merge_linestring(highway) ON osm_transportation_merge_linestring(highway)
WHERE highway IN ('motorway','trunk', 'primary'); WHERE highway IN ('motorway','trunk', 'primary', 'construction');
-- etldoc: osm_transportation_merge_linestring -> osm_transportation_merge_linestring_gen3 -- etldoc: osm_transportation_merge_linestring -> osm_transportation_merge_linestring_gen3
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen3 AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen3 AS (
SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, highway, z_order SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, highway, construction, z_order
FROM osm_transportation_merge_linestring FROM osm_transportation_merge_linestring
WHERE highway IN ('motorway','trunk', 'primary') WHERE highway IN ('motorway','trunk', 'primary')
OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary')
); );
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_geometry_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_geometry_idx
ON osm_transportation_merge_linestring_gen3 USING gist(geometry); ON osm_transportation_merge_linestring_gen3 USING gist(geometry);
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_highway_partial_idx
ON osm_transportation_merge_linestring_gen3(highway) ON osm_transportation_merge_linestring_gen3(highway)
WHERE highway IN ('motorway','trunk', 'primary'); WHERE highway IN ('motorway','trunk', 'primary', 'construction');
-- etldoc: osm_transportation_merge_linestring_gen3 -> osm_transportation_merge_linestring_gen4 -- etldoc: osm_transportation_merge_linestring_gen3 -> osm_transportation_merge_linestring_gen4
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen4 AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen4 AS (
SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, highway, z_order SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, highway, construction, z_order
FROM osm_transportation_merge_linestring_gen3 FROM osm_transportation_merge_linestring_gen3
WHERE highway IN ('motorway','trunk', 'primary') AND ST_Length(geometry) > 50 WHERE (highway IN ('motorway','trunk', 'primary') OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary'))
AND ST_Length(geometry) > 50
); );
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_geometry_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_geometry_idx
ON osm_transportation_merge_linestring_gen4 USING gist(geometry); ON osm_transportation_merge_linestring_gen4 USING gist(geometry);
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_highway_partial_idx
ON osm_transportation_merge_linestring_gen4(highway) ON osm_transportation_merge_linestring_gen4(highway)
WHERE highway IN ('motorway','trunk', 'primary'); WHERE highway IN ('motorway','trunk', 'primary', 'construction');
-- etldoc: osm_transportation_merge_linestring_gen4 -> osm_transportation_merge_linestring_gen5 -- etldoc: osm_transportation_merge_linestring_gen4 -> osm_transportation_merge_linestring_gen5
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen5 AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen5 AS (
SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, highway, z_order SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, highway, construction, z_order
FROM osm_transportation_merge_linestring_gen4 FROM osm_transportation_merge_linestring_gen4
WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 100 WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk'))
AND ST_Length(geometry) > 100
); );
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_geometry_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_geometry_idx
ON osm_transportation_merge_linestring_gen5 USING gist(geometry); ON osm_transportation_merge_linestring_gen5 USING gist(geometry);
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_highway_partial_idx
ON osm_transportation_merge_linestring_gen5(highway) ON osm_transportation_merge_linestring_gen5(highway)
WHERE highway IN ('motorway', 'trunk'); WHERE highway IN ('motorway','trunk', 'construction');
-- etldoc: osm_transportation_merge_linestring_gen5 -> osm_transportation_merge_linestring_gen6 -- etldoc: osm_transportation_merge_linestring_gen5 -> osm_transportation_merge_linestring_gen6
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen6 AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen6 AS (
SELECT ST_Simplify(geometry, 1000) AS geometry, osm_id, highway, z_order SELECT ST_Simplify(geometry, 1000) AS geometry, osm_id, highway, construction, z_order
FROM osm_transportation_merge_linestring_gen5 FROM osm_transportation_merge_linestring_gen5
WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 500 WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk')) AND ST_Length(geometry) > 500
); );
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_geometry_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_geometry_idx
ON osm_transportation_merge_linestring_gen6 USING gist(geometry); ON osm_transportation_merge_linestring_gen6 USING gist(geometry);
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_highway_partial_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_highway_partial_idx
ON osm_transportation_merge_linestring_gen6(highway) ON osm_transportation_merge_linestring_gen6(highway)
WHERE highway IN ('motorway','trunk'); WHERE highway IN ('motorway','trunk', 'construction');
-- etldoc: osm_transportation_merge_linestring_gen6 -> osm_transportation_merge_linestring_gen7 -- etldoc: osm_transportation_merge_linestring_gen6 -> osm_transportation_merge_linestring_gen7
CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen7 AS ( CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen7 AS (
SELECT ST_Simplify(geometry, 2000) AS geometry, osm_id, highway, z_order SELECT ST_Simplify(geometry, 2000) AS geometry, osm_id, highway, construction, z_order
FROM osm_transportation_merge_linestring_gen6 FROM osm_transportation_merge_linestring_gen6
WHERE highway IN ('motorway') AND ST_Length(geometry) > 1000 WHERE (highway = 'motorway' OR highway = 'construction' AND construction = 'motorway') AND ST_Length(geometry) > 1000
); );
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen7_geometry_idx CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen7_geometry_idx
ON osm_transportation_merge_linestring_gen7 USING gist(geometry); ON osm_transportation_merge_linestring_gen7 USING gist(geometry);