From 402242e2c4b67cc2213003d343cd278d78207940 Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Sat, 8 Oct 2016 16:47:24 +0200 Subject: [PATCH] Refactor building into table function --- data.yml | 20 +++----------------- schema/layers/building.sql | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/data.yml b/data.yml index 03d10aed..8cf97063 100644 --- a/data.yml +++ b/data.yml @@ -104,7 +104,7 @@ Layer: Datasource: dbname: osm extent: -20037508.34,-20037508.34,20037508.34,20037508.34 - geometry_field: way + geometry_field: geom geometry_table: '' host: db key_field: '' @@ -112,22 +112,8 @@ Layer: max_size: 512 password: osm port: 5432 - srid: '' - table: |- - ( SELECT - osm_id, - way, - least(greatest(3, COALESCE(height, levels*3.66,5)),400)^.7 AS render_height - FROM ( - SELECT osm_id, ST_Simplify(way, 10) AS way, height, levels FROM building_z13 - WHERE z(!scale_denominator!) = 13 - UNION ALL - SELECT * FROM building_z14 - WHERE z(!scale_denominator!) >= 14 - ) AS water - WHERE way && !bbox! - ORDER BY render_height, ST_YMin(way) DESC - ) AS data + srid: 900913 + table: (SELECT * FROM layer_building(!bbox!, z(!scale_denominator!))) AS t type: postgis user: osm description: Buildings diff --git a/schema/layers/building.sql b/schema/layers/building.sql index ccdc5c93..5f28b293 100644 --- a/schema/layers/building.sql +++ b/schema/layers/building.sql @@ -5,3 +5,20 @@ CREATE OR REPLACE VIEW building_z13 AS ( CREATE OR REPLACE VIEW building_z14 AS ( SELECT osm_id, way, height, levels FROM buildings ); + +CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int) +RETURNS TABLE(geom geometry, osm_id bigint, render_height float) AS $$ + WITH zoom_levels AS ( + SELECT osm_id, ST_Simplify(way, 10) AS way, height, levels FROM building_z13 + WHERE zoom_level = 13 + UNION ALL + SELECT * FROM building_z14 + WHERE zoom_level >= 14 + ) + SELECT way, osm_id, + least(greatest(3, COALESCE(height, levels*3.66,5)),400)^.7 AS render_height + FROM zoom_levels + WHERE way && bbox + ORDER BY render_height, ST_YMin(way) DESC; +$$ LANGUAGE SQL IMMUTABLE; +