From 891b60b73602c105ead62f5a7e3d1e000201c5ce Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Sat, 8 Oct 2016 16:50:25 +0200 Subject: [PATCH] Refactor urban into table function --- data.yml | 17 ++--------------- schema/layers/urban.sql | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/data.yml b/data.yml index 8cf9706..2ae37dc 100644 --- a/data.yml +++ b/data.yml @@ -135,21 +135,8 @@ Layer: max_size: 512 password: osm port: 5432 - srid: '' - table: |- - ( SELECT geom, scalerank - FROM ( - SELECT * FROM urban_z4 - WHERE z(!scale_denominator!) = 4 - UNION ALL - SELECT * FROM urban_z5 - WHERE z(!scale_denominator!) = 5 - UNION ALL - SELECT * FROM urban_z6 - WHERE z(!scale_denominator!) >= 6 AND scalerank-1 <= z(!scale_denominator!) - ) AS urban - WHERE geom && !bbox! - ) AS t + srid: 900913 + table: (SELECT * FROM layer_urban(!bbox!, z(!scale_denominator!))) AS t type: postgis user: osm description: Buildings diff --git a/schema/layers/urban.sql b/schema/layers/urban.sql index c971228..15043d8 100644 --- a/schema/layers/urban.sql +++ b/schema/layers/urban.sql @@ -13,3 +13,19 @@ CREATE OR REPLACE VIEW urban_z6 AS ( SELECT geom, scalerank FROM ne_10m_urban_areas ); + +CREATE OR REPLACE FUNCTION layer_urban(bbox geometry, zoom_level int) +RETURNS TABLE(geom geometry, scalerank int) AS $$ + WITH zoom_levels AS ( + SELECT * FROM urban_z4 + WHERE zoom_level = 4 + UNION ALL + SELECT * FROM urban_z5 + WHERE zoom_level = 5 + UNION ALL + SELECT * FROM urban_z6 + WHERE zoom_level >= 6 AND scalerank-1 <= zoom_level + ) + SELECT geom, scalerank FROM zoom_levels + WHERE geom && bbox; +$$ LANGUAGE SQL IMMUTABLE;