From a3455407e8eecd4307a88a124f5cdea09b306d16 Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Mon, 24 Oct 2016 21:29:50 +0200 Subject: [PATCH] Move railway over to imposm3 and improve z_order --- layers/highway/highway.sql | 71 +++++++++++++++++-------------------- layers/highway/mapping.yaml | 20 +++++++++-- layers/rail/rail.sql | 18 ---------- layers/rail/rail.yaml | 8 ----- layers/railway/mapping.yaml | 33 +++++++++++++++++ layers/railway/railway.sql | 38 ++++++++++++++++++++ layers/railway/railway.yaml | 12 +++++++ openmaptiles.yaml | 2 +- 8 files changed, 133 insertions(+), 69 deletions(-) delete mode 100644 layers/rail/rail.sql delete mode 100644 layers/rail/rail.yaml create mode 100644 layers/railway/mapping.yaml create mode 100644 layers/railway/railway.sql create mode 100644 layers/railway/railway.yaml diff --git a/layers/highway/highway.sql b/layers/highway/highway.sql index 121a1584..4372530d 100644 --- a/layers/highway/highway.sql +++ b/layers/highway/highway.sql @@ -1,3 +1,11 @@ +CREATE OR REPLACE FUNCTION highway_brunnel(is_bridge boolean, is_tunnel boolean) RETURNS TEXT AS $$ + SELECT CASE + WHEN is_bridge THEN 'bridge' + WHEN is_tunnel THEN 'tunnel' + ELSE NULL + END; +$$ LANGUAGE SQL IMMUTABLE; + CREATE OR REPLACE FUNCTION highway_class(highway TEXT) RETURNS TEXT AS $$ SELECT CASE WHEN highway IN ('unclassified', 'residential', 'living_street', 'road', 'track', 'service') THEN 'minor' @@ -21,13 +29,13 @@ CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$ $$ LANGUAGE SQL IMMUTABLE; CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS ( - SELECT geom AS geometry, scalerank, ne_highway(type) AS highway + SELECT geom AS geometry, scalerank, ne_highway(type) AS highway, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, 0::int as z_order FROM ne_10m_roads WHERE continent <> 'North America' AND featurecla = 'Road' AND type IN ('Major Highway', 'Secondary Highway', 'Road') UNION ALL - SELECT geom AS geometry, scalerank, ne_highway(type) AS highway + SELECT geom AS geometry, scalerank, ne_highway(type) AS highway, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, 0::int as z_order FROM ne_10m_roads_north_america WHERE type IN ('Major Highway', 'Secondary Highway', 'Road') ); @@ -36,65 +44,51 @@ CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geometry_idx ON ne_10m_global_roa CREATE INDEX IF NOT EXISTS ne_10m_global_roads_scalerank_idx ON ne_10m_global_roads(scalerank); CREATE OR REPLACE VIEW highway_z4 AS ( - SELECT geometry, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM ne_10m_global_roads WHERE scalerank <= 5 ); CREATE OR REPLACE VIEW highway_z5 AS ( - SELECT geometry, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM ne_10m_global_roads WHERE scalerank <= 6 ); CREATE OR REPLACE VIEW highway_z6 AS ( - SELECT geometry, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM ne_10m_global_roads WHERE scalerank <= 7 ); -CREATE OR REPLACE VIEW highway_z7 AS ( - SELECT geometry, highway - FROM ne_10m_global_roads - WHERE scalerank <= 7 +CREATE OR REPLACE VIEW highway_z8 AS ( + SELECT geometry, highway, is_tunnel, is_bridge, z_order + FROM osm_highway_linestring_gen4 ); -CREATE TABLE IF NOT EXISTS highway_z8 AS ( - SELECT ST_Simplify(geometry, 200) AS geometry, highway - FROM osm_highway_linestring - WHERE highway IN ('motorway','trunk') +CREATE OR REPLACE VIEW highway_z9 AS ( + SELECT geometry, highway, is_tunnel, is_bridge, z_order + FROM osm_highway_linestring_gen3 ); -CREATE INDEX IF NOT EXISTS highway_z8_geometry_idx ON highway_z8 USING gist(geometry); -CREATE TABLE IF NOT EXISTS highway_z9 AS ( - SELECT ST_Simplify(geometry, 120) AS geometry, highway - FROM osm_highway_linestring - WHERE highway IN ('motorway','trunk', 'primary') +CREATE OR REPLACE VIEW highway_z10 AS ( + SELECT geometry, highway, is_tunnel, is_bridge, z_order + FROM osm_highway_linestring_gen2 ); -CREATE INDEX IF NOT EXISTS highway_z9_geometry_idx ON highway_z9 USING gist(geometry); -CREATE TABLE IF NOT EXISTS highway_z10 AS ( - SELECT ST_Simplify(geometry, 50) AS geometry, highway - FROM osm_highway_linestring - WHERE highway IN ('motorway','trunk', 'primary', 'secondary') +CREATE OR REPLACE VIEW highway_z11 AS ( + SELECT geometry, highway, is_tunnel, is_bridge, z_order + FROM osm_highway_linestring_gen1 ); -CREATE INDEX IF NOT EXISTS highway_z10_geometry_idx ON highway_z10 USING gist(geometry); - -CREATE TABLE IF NOT EXISTS highway_z11 AS ( - SELECT ST_Simplify(geometry, 20) AS geometry, highway - FROM osm_highway_linestring - WHERE highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') -); -CREATE INDEX IF NOT EXISTS highway_z11_geometry_idx ON highway_z11 USING gist(geometry); CREATE OR REPLACE VIEW highway_z12 AS ( - SELECT geometry, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM osm_highway_linestring WHERE highway IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor') ); CREATE OR REPLACE VIEW highway_z13 AS ( - SELECT geometry, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM osm_highway_linestring WHERE highway IN ( 'motorway', @@ -115,20 +109,18 @@ CREATE OR REPLACE VIEW highway_z13 AS ( ); CREATE OR REPLACE VIEW highway_z14 AS ( - SELECT geometry AS geom, highway + SELECT geometry, highway, is_tunnel, is_bridge, z_order FROM osm_highway_linestring ); CREATE OR REPLACE FUNCTION layer_highway(bbox geometry, zoom_level int) RETURNS TABLE(geometry geometry, class text, subclass text) AS $$ - SELECT geometry, highway_class(highway) AS class, highway AS sublcass FROM ( + SELECT geometry, highway_class(highway) AS class, highway AS subclass FROM ( SELECT * FROM highway_z4 WHERE zoom_level BETWEEN 4 AND 5 UNION ALL SELECT * FROM highway_z5 WHERE zoom_level = 5 UNION ALL - SELECT * FROM highway_z6 WHERE zoom_level = 6 - UNION ALL - SELECT * FROM highway_z7 WHERE zoom_level = 7 + SELECT * FROM highway_z6 WHERE zoom_level BETWEEN 6 AND 7 UNION ALL SELECT * FROM highway_z8 WHERE zoom_level = 8 UNION ALL @@ -144,5 +136,6 @@ RETURNS TABLE(geometry geometry, class text, subclass text) AS $$ UNION ALL SELECT * FROM highway_z14 WHERE zoom_level >= 14 ) AS zoom_levels - WHERE geometry && bbox; + WHERE geometry && bbox + ORDER BY z_order ASC; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/highway/mapping.yaml b/layers/highway/mapping.yaml index a408c505..9430ef17 100644 --- a/layers/highway/mapping.yaml +++ b/layers/highway/mapping.yaml @@ -1,3 +1,20 @@ +generalized_tables: + highway_linestring_gen4: + source: highway_linestring_gen3 + sql_filter: highway IN ('motorway','trunk') + tolerance: 200.0 + highway_linestring_gen3: + source: highway_linestring_gen2 + sql_filter: highway IN ('motorway','trunk', 'primary') + tolerance: 120.0 + highway_linestring_gen2: + source: highway_linestring_gen1 + sql_filter: highway IN ('motorway','trunk', 'primary', 'secondary') + tolerance: 50.0 + highway_linestring_gen1: + source: highway_linestring + sql_filter: highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') + tolerance: 20.0 tables: highway_linestring: type: linestring @@ -12,9 +29,6 @@ tables: - key: oneway name: oneway type: direction - - key: layer - name: layer - type: integer - name: z_order type: wayzorder - key: tunnel diff --git a/layers/rail/rail.sql b/layers/rail/rail.sql deleted file mode 100644 index 290e72e9..00000000 --- a/layers/rail/rail.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE OR REPLACE VIEW rail_z13 AS ( - SELECT * FROM rail - WHERE class='rail' -); - -CREATE OR REPLACE VIEW rail_z14 AS ( - SELECT * FROM rail -); - -CREATE OR REPLACE FUNCTION layer_rail(bbox geometry, zoom_level int) -RETURNS TABLE(geom geometry, class text, brunnel text) AS $$ - SELECT way AS geom, class::text, brunnel::text FROM ( - SELECT * FROM rail_z13 WHERE zoom_level = 13 - UNION ALL - SELECT * FROM rail_z14 WHERE zoom_level >= 14 - ) AS zoom_levels - WHERE way && bbox; -$$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/rail/rail.yaml b/layers/rail/rail.yaml deleted file mode 100644 index 64c58618..00000000 --- a/layers/rail/rail.yaml +++ /dev/null @@ -1,8 +0,0 @@ -layer: - id: "rail" - description: Rail - buffer_size: 4 - datasource: - query: (SELECT * FROM layer_building(!bbox!, z(!scale_denominator!))) AS t -schema: - - ./rail.sql diff --git a/layers/railway/mapping.yaml b/layers/railway/mapping.yaml new file mode 100644 index 00000000..6abb3d2b --- /dev/null +++ b/layers/railway/mapping.yaml @@ -0,0 +1,33 @@ +tables: + railway_linestring: + type: linestring + fields: + - name: osm_id + type: id + - name: geometry + type: geometry + - key: railway + name: railway + type: string + - name: z_order + type: wayzorder + - key: tunnel + name: is_tunnel + type: bool + - key: bridge + name: is_bridge + type: bool + - key: service + name: service + type: string + - key: usage + name: usage + type: string + mapping: + railway: + - rail + - light_rail + - subway + - narrow_gauge + - preserved + - tram diff --git a/layers/railway/railway.sql b/layers/railway/railway.sql new file mode 100644 index 00000000..4a4c1cb9 --- /dev/null +++ b/layers/railway/railway.sql @@ -0,0 +1,38 @@ +CREATE OR REPLACE FUNCTION railway_class(railway text, service text) RETURNS TEXT AS $$ + SELECT CASE + WHEN railway='rail' AND service='' THEN 'rail' + ELSE 'minor' + END; +$$ LANGUAGE SQL IMMUTABLE; + +CREATE OR REPLACE FUNCTION railway_brunnel(is_bridge boolean, is_tunnel boolean) RETURNS TEXT AS $$ + SELECT CASE + WHEN is_bridge THEN 'bridge' + WHEN is_tunnel THEN 'tunnel' + ELSE NULL + END; +$$ LANGUAGE SQL IMMUTABLE; + +CREATE OR REPLACE VIEW railway_z13 AS ( + SELECT * FROM osm_railway_linestring + WHERE railway = 'rail' AND service='' +); + +CREATE OR REPLACE VIEW railway_z14 AS ( + SELECT * FROM osm_railway_linestring +); + +CREATE OR REPLACE FUNCTION layer_railway(bbox geometry, zoom_level int) +RETURNS TABLE(geometry geometry, class text, subclass text, brunnel text) AS $$ + SELECT geometry, + railway_class(railway, service) AS class, + railway AS subclass, + railway_brunnel(is_bridge, is_tunnel) AS brunnel + FROM ( + SELECT * FROM railway_z13 WHERE zoom_level = 13 + UNION ALL + SELECT * FROM railway_z14 WHERE zoom_level >= 14 + ) AS zoom_levels + WHERE geometry && bbox + ORDER BY z_order ASC; +$$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/railway/railway.yaml b/layers/railway/railway.yaml new file mode 100644 index 00000000..f762e329 --- /dev/null +++ b/layers/railway/railway.yaml @@ -0,0 +1,12 @@ +layer: + id: "railway" + description: Rail + buffer_size: 4 + datasource: + geometry_field: geometry + query: (SELECT * FROM layer_railway(!bbox!, z(!scale_denominator!))) AS t +schema: + - ./railway.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/openmaptiles.yaml b/openmaptiles.yaml index 8571fc3c..fa8349bc 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -4,7 +4,7 @@ tileset: - layers/highway/highway.yaml - layers/building/building.yaml - layers/place/place.yaml - #- layers/rail/rail.yaml + - layers/railway/railway.yaml - layers/water/water.yaml - layers/waterway/waterway.yaml - layers/landcover/landcover.yaml