From a48123657c77279165e7c6f2aa7753421db90208 Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Mon, 10 Oct 2016 20:17:05 +0200 Subject: [PATCH] Move road to imposm3 based highway --- layers/highway/highway.sql | 136 ++++++++++++++++++++++++++++++++++++ layers/highway/highway.yaml | 17 +++++ layers/highway/mapping.yaml | 59 ++++++++++++++++ layers/road/road.sql | 129 ---------------------------------- layers/road/road.yaml | 12 ---- 5 files changed, 212 insertions(+), 141 deletions(-) create mode 100644 layers/highway/highway.sql create mode 100644 layers/highway/highway.yaml create mode 100644 layers/highway/mapping.yaml delete mode 100644 layers/road/road.sql delete mode 100644 layers/road/road.yaml diff --git a/layers/highway/highway.sql b/layers/highway/highway.sql new file mode 100644 index 0000000..8297e6b --- /dev/null +++ b/layers/highway/highway.sql @@ -0,0 +1,136 @@ +CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$ + SELECT CASE type + WHEN 'Major Highway' THEN 'motorway' + WHEN 'Secondary Highway' THEN 'trunk' + WHEN 'Road' THEN 'primary' + ELSE type + END; +$$ LANGUAGE SQL IMMUTABLE; + +CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS ( + SELECT geom, scalerank, ne_highway(type) AS highway + FROM ne_10m_roads + WHERE continent <> 'North America' + AND featurecla = 'Road' + AND type IN ('Major Highway', 'Secondary Highway', 'Road') + UNION ALL + SELECT geom, scalerank, ne_highway(type) AS highway + FROM ne_10m_roads_north_america + WHERE type IN ('Major Highway', 'Secondary Highway', 'Road') +); + +CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geom_idx ON ne_10m_global_roads USING gist(geom); +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 geom, highway + FROM ne_10m_global_roads + WHERE scalerank <= 5 +); + +CREATE OR REPLACE VIEW highway_z5 AS ( + SELECT geom, highway + FROM ne_10m_global_roads + WHERE scalerank <= 6 +); + +CREATE OR REPLACE VIEW highway_z6 AS ( + SELECT geom, highway + FROM ne_10m_global_roads + WHERE scalerank <= 7 +); + +CREATE OR REPLACE VIEW highway_z7 AS ( + SELECT geom, highway + FROM ne_10m_global_roads + WHERE scalerank <= 7 +); + +CREATE TABLE IF NOT EXISTS highway_z8 AS ( + SELECT ST_Simplify(geometry, 200) AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ('motorway','trunk') +); +CREATE INDEX IF NOT EXISTS highway_z8_geom_idx ON highway_z8 USING gist(geom); + +CREATE TABLE IF NOT EXISTS highway_z9 AS ( + SELECT ST_Simplify(geometry, 120) AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ('motorway','trunk', 'primary') +); +CREATE INDEX IF NOT EXISTS highway_z9_geom_idx ON highway_z9 USING gist(geom); + +CREATE TABLE IF NOT EXISTS highway_z10 AS ( + SELECT ST_Simplify(geometry, 50) AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ('motorway','trunk', 'primary', 'secondary') +); +CREATE INDEX IF NOT EXISTS highway_z10_geom_idx ON highway_z10 USING gist(geom); + +CREATE TABLE IF NOT EXISTS highway_z11 AS ( + SELECT ST_Simplify(geometry, 20) AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') +); +CREATE INDEX IF NOT EXISTS highway_z11_geom_idx ON highway_z11 USING gist(geom); + +CREATE OR REPLACE VIEW highway_z12 AS ( + SELECT geometry AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor') +); + +CREATE OR REPLACE VIEW highway_z13 AS ( + SELECT geometry AS geom, highway + FROM osm_highway_linestring + WHERE highway IN ( + 'motorway', + 'motorway_link', + 'trunk', + 'trunk_link', + 'primary', + 'primary_link', + 'secondary', + 'secondary_link', + 'tertiary', + 'tertiary_link', + 'road', + 'living_street', + 'service', + 'residential' + ) +); + + +CREATE OR REPLACE VIEW highway_z14 AS ( + SELECT geometry AS geom, highway + FROM osm_highway_linestring +); + +CREATE OR REPLACE FUNCTION layer_highway(bbox geometry, zoom_level int) +RETURNS TABLE(geom geometry, highway text) AS $$ + SELECT geom, highway 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 + UNION ALL + SELECT * FROM highway_z8 WHERE zoom_level = 8 + UNION ALL + SELECT * FROM highway_z9 WHERE zoom_level = 9 + UNION ALL + SELECT * FROM highway_z10 WHERE zoom_level = 10 + UNION ALL + SELECT * FROM highway_z11 WHERE zoom_level = 11 + UNION ALL + SELECT * FROM highway_z12 WHERE zoom_level = 12 + UNION ALL + SELECT * FROM highway_z13 WHERE zoom_level = 13 + UNION ALL + SELECT * FROM highway_z14 WHERE zoom_level >= 14 + ) AS zoom_levels + WHERE geom && bbox; +$$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/highway/highway.yaml b/layers/highway/highway.yaml new file mode 100644 index 0000000..64f8705 --- /dev/null +++ b/layers/highway/highway.yaml @@ -0,0 +1,17 @@ +layer: + id: "highway" + description: | + [OpenStreetMap highway] which is used for roads, paths and cycletracks + and other recognised routes on land. + buffer_size: 4 + 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 + fields: + class: String + datasource: + srid: 900913 + query: (SELECT * FROM layer_highway(!bbox!, z(!scale_denominator!))) AS t +schema: + - ./highway.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/layers/highway/mapping.yaml b/layers/highway/mapping.yaml new file mode 100644 index 0000000..16cf67b --- /dev/null +++ b/layers/highway/mapping.yaml @@ -0,0 +1,59 @@ +tables: + highway_linestring: + type: linestring + fields: + - name: osm_id + type: id + - name: geometry + type: geometry + - name: highway + key: highway + type: string + - key: oneway + name: oneway + type: direction + - key: layer + name: layer + type: integer + - name: z_order + type: wayzorder + - key: tunnel + name: is_tunnel + type: bool + - key: bridge + name: is_bridge + type: bool + - key: name + name: name + type: string + - name: name_en + key: name:en + type: string + mapping: + highway: + - motorway + - motorway_link + - trunk + - trunk_link + - primary + - primary_link + - secondary + - secondary_link + - tertiary + - tertiary_link + - unclassified + - residential + - road + - living_street + - raceway + - construction + - track + - service + - path + - cycleway + - steps + - bridleway + - footway + - corridor + - crossing + - pedestrian diff --git a/layers/road/road.sql b/layers/road/road.sql deleted file mode 100644 index 9d1711a..0000000 --- a/layers/road/road.sql +++ /dev/null @@ -1,129 +0,0 @@ -CREATE OR REPLACE FUNCTION ne_road_class(type VARCHAR) RETURNS VARCHAR AS $$ - SELECT CASE type - WHEN 'Major Highway' THEN 'motorway' - WHEN 'Secondary Highway' THEN 'trunk' - WHEN 'Road' THEN 'primary' - ELSE type - END; -$$ LANGUAGE SQL IMMUTABLE; - -CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS ( - SELECT geom, scalerank, ne_road_class(type) AS class - FROM ne_10m_roads - WHERE continent <> 'North America' - AND featurecla = 'Road' - AND type IN ('Major Highway', 'Secondary Highway', 'Road') - UNION ALL - SELECT geom, scalerank, ne_road_class(type) AS class - FROM ne_10m_roads_north_america - WHERE type IN ('Major Highway', 'Secondary Highway', 'Road') -); - -CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geom_idx ON ne_10m_global_roads USING gist(geom); -CREATE INDEX IF NOT EXISTS ne_10m_global_roads_scalerank_idx ON ne_10m_global_roads(scalerank); - -CREATE OR REPLACE VIEW road_z4 AS ( - SELECT geom, class - FROM ne_10m_global_roads - WHERE scalerank <= 5 -); - -CREATE OR REPLACE VIEW road_z5 AS ( - SELECT geom, class - FROM ne_10m_global_roads - WHERE scalerank <= 6 -); - -CREATE OR REPLACE VIEW road_z6 AS ( - SELECT geom, class - FROM ne_10m_global_roads - WHERE scalerank <= 7 -); - -CREATE OR REPLACE VIEW road_z7 AS ( - SELECT geom, class - FROM ne_10m_global_roads - WHERE scalerank <= 7 -); - -CREATE TABLE IF NOT EXISTS road_z8 AS ( - SELECT ST_Simplify(way, 200) AS geom, class::text - FROM roads - WHERE class IN ('motorway','trunk') -); -CREATE INDEX IF NOT EXISTS road_z8_geom_idx ON road_z8 USING gist(geom); - -CREATE TABLE IF NOT EXISTS road_z9 AS ( - SELECT ST_Simplify(way, 120) AS geom, class::text - FROM roads - WHERE class IN ('motorway','trunk', 'primary') -); -CREATE INDEX IF NOT EXISTS road_z9_geom_idx ON road_z9 USING gist(geom); - -CREATE TABLE IF NOT EXISTS road_z10 AS ( - SELECT ST_Simplify(way, 50) AS geom, class::text - FROM roads - WHERE class IN ('motorway','trunk', 'primary', 'secondary') -); -CREATE INDEX IF NOT EXISTS road_z10_geom_idx ON road_z10 USING gist(geom); - -CREATE TABLE IF NOT EXISTS road_z11 AS ( - SELECT ST_Simplify(way, 20) AS geom, class::text - FROM roads - WHERE class IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') -); -CREATE INDEX IF NOT EXISTS road_z11_geom_idx ON road_z11 USING gist(geom); - -CREATE OR REPLACE VIEW road_z12 AS ( - SELECT way AS geom, class::text - FROM roads - WHERE class IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor') - UNION ALL - SELECT way AS geom, class::text - FROM road_areas -); - -CREATE OR REPLACE VIEW road_z13 AS ( - SELECT way AS geom, class::text - FROM roads - WHERE class NOT IN ('path') - UNION ALL - SELECT way AS geom, class::text - FROM road_areas -); - -CREATE OR REPLACE VIEW road_z14 AS ( - SELECT way AS geom, class::text - FROM roads - UNION ALL - SELECT way AS geom, class::text - FROM road_areas -); - -CREATE OR REPLACE FUNCTION layer_road(bbox geometry, zoom_level int) -RETURNS TABLE(geom geometry, class text) AS $$ - SELECT geom, class::text FROM ( - SELECT * FROM road_z4 WHERE zoom_level BETWEEN 4 AND 5 - UNION ALL - SELECT * FROM road_z5 WHERE zoom_level = 5 - UNION ALL - SELECT * FROM road_z6 WHERE zoom_level = 6 - UNION ALL - SELECT * FROM road_z7 WHERE zoom_level = 7 - UNION ALL - SELECT * FROM road_z8 WHERE zoom_level = 8 - UNION ALL - SELECT geom, class FROM road_z9 WHERE zoom_level = 9 - UNION ALL - SELECT geom, class FROM road_z10 WHERE zoom_level = 10 - UNION ALL - SELECT geom, class FROM road_z11 WHERE zoom_level = 11 - UNION ALL - SELECT geom, class FROM road_z12 WHERE zoom_level = 12 - UNION ALL - SELECT * FROM road_z13 WHERE zoom_level = 13 - UNION ALL - SELECT * FROM road_z14 WHERE zoom_level >= 14 - ) AS zoom_levels - WHERE geom && bbox; -$$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/road/road.yaml b/layers/road/road.yaml deleted file mode 100644 index 737c5ba..0000000 --- a/layers/road/road.yaml +++ /dev/null @@ -1,12 +0,0 @@ -layer: - id: "road" - description: Roads - buffer_size: 4 - 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 - fields: - class: String - datasource: - srid: 900913 - query: (SELECT * FROM layer_road(!bbox!, z(!scale_denominator!))) AS t -schema: - - ./road.sql