From 69b77416be91d44629599bff083a5e2d6667a7d6 Mon Sep 17 00:00:00 2001 From: Lukas Martinelli Date: Sat, 26 Nov 2016 20:46:19 +0000 Subject: [PATCH] Add ramp, oneway, brunnel to transportation --- layers/transportation/highway.sql | 10 ++++---- layers/transportation/transportation.yaml | 2 +- layers/transportation/types.sql | 28 +++++++---------------- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/layers/transportation/highway.sql b/layers/transportation/highway.sql index a95fbf3..cd8b8bd 100644 --- a/layers/transportation/highway.sql +++ b/layers/transportation/highway.sql @@ -6,14 +6,16 @@ $$ LANGUAGE SQL IMMUTABLE STRICT; -- etldoc: layer_transportation[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: label=" layer_transportation | z4-z7 | z8 | z9 | z10 | z11 | z12| z13| z14_" ] ; CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int) -RETURNS TABLE(osm_id bigint, geometry geometry, class highway_class, subclass text, properties highway_properties) AS $$ +RETURNS TABLE(osm_id bigint, geometry geometry, class highway_class, subclass text, ramp int, oneway int, brunnel TEXT) AS $$ SELECT osm_id, geometry, to_highway_class(highway) AS class, highway AS subclass, - to_highway_properties(is_bridge, is_tunnel, is_ford, is_ramp, is_oneway) AS properties + CASE WHEN highway_is_link(highway) THEN 1 ELSE is_ramp::int END AS ramp, + is_oneway::int AS oneway, + to_brunnel(is_bridge, is_tunnel, is_ford) AS brunnel FROM ( - -- etldoc: ne_10m_global_roads -> layer_transportation:z4z7 + -- etldoc: ne_10m_global_roads -> layer_transportation:z4z6 SELECT NULL::bigint AS osm_id, geometry, highway, FALSE AS is_bridge, FALSE AS is_tunnel, FALSE AS is_ford, FALSE AS is_ramp, FALSE AS is_oneway, @@ -22,7 +24,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class highway_class, subclass te WHERE zoom_level BETWEEN 4 AND 6 AND scalerank <= 1 + zoom_level UNION ALL - -- etldoc: osm_transportation_linestring_gen4 -> layer_transportation:z8 + -- etldoc: osm_transportation_linestring_gen4 -> layer_transportation:z7z8 SELECT osm_id, geometry, highway, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, z_order FROM osm_transportation_linestring_gen4 WHERE zoom_level BETWEEN 7 AND 8 diff --git a/layers/transportation/transportation.yaml b/layers/transportation/transportation.yaml index 3d53067..0d189e4 100644 --- a/layers/transportation/transportation.yaml +++ b/layers/transportation/transportation.yaml @@ -29,7 +29,7 @@ layer: datasource: geometry_field: geometry srid: 900913 - query: (SELECT geometry, class::text, subclass, properties::text FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, class::text, subclass, oneway, ramp, brunnel FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t schema: - ./types.sql - ./ne_global_roads.sql diff --git a/layers/transportation/types.sql b/layers/transportation/types.sql index 10e6c6b..e9560bc 100644 --- a/layers/transportation/types.sql +++ b/layers/transportation/types.sql @@ -8,13 +8,14 @@ BEGIN END $$; -DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'highway_properties') THEN - CREATE TYPE highway_properties AS ENUM ('bridge:oneway', 'tunnel:oneway', 'ramp', 'ford', 'bridge', 'tunnel', 'oneway'); - END IF; -END -$$; +CREATE OR REPLACE FUNCTION to_brunnel(is_bridge BOOL, is_tunnel BOOL, is_ford BOOL) RETURNS TEXT AS $$ + SELECT CASE + WHEN is_bridge THEN 'bridge' + WHEN is_tunnel THEN 'tunnel' + WHEN is_ford THEN 'ford' + ELSE NULL + END; +$$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION to_highway_class(highway TEXT) RETURNS highway_class AS $$ SELECT CASE @@ -29,16 +30,3 @@ CREATE OR REPLACE FUNCTION to_highway_class(highway TEXT) RETURNS highway_class ELSE NULL END; $$ LANGUAGE SQL IMMUTABLE STRICT; - -CREATE OR REPLACE FUNCTION to_highway_properties(is_bridge boolean, is_tunnel boolean, is_ford boolean, is_ramp boolean, is_oneway boolean) RETURNS highway_properties AS $$ - SELECT CASE - WHEN is_bridge AND is_oneway THEN 'bridge:oneway'::highway_properties - WHEN is_tunnel AND is_oneway THEN 'tunnel:oneway'::highway_properties - WHEN is_ramp THEN 'ramp'::highway_properties - WHEN is_ford THEN 'ford'::highway_properties - WHEN is_bridge THEN 'bridge'::highway_properties - WHEN is_tunnel THEN 'tunnel'::highway_properties - WHEN is_oneway THEN 'oneway'::highway_properties - ELSE NULL - END; -$$ LANGUAGE SQL IMMUTABLE;