Refactor water into table function

This commit is contained in:
lukasmartinelli 2016-10-08 16:34:46 +02:00
parent dea365463f
commit c3aa9ae0a8
2 changed files with 65 additions and 62 deletions

View File

@ -23,51 +23,8 @@ Layer:
max_size: 512 max_size: 512
password: osm password: osm
port: 5432 port: 5432
srid: '' srid: 900913
table: |- table: (SELECT * FROM layer_water(!bbox!, z(!scale_denominator!))) AS t
( SELECT *
FROM (
SELECT * FROM water_z0
WHERE z(!scale_denominator!) = 0
UNION ALL
SELECT * FROM water_z1
WHERE z(!scale_denominator!) = 1
UNION ALL
SELECT * FROM water_z2
WHERE z(!scale_denominator!) = 2
UNION ALL
SELECT * FROM water_z3
WHERE z(!scale_denominator!) = 3
UNION ALL
SELECT * FROM water_z4
WHERE z(!scale_denominator!) = 4
UNION ALL
SELECT * FROM water_z5
WHERE z(!scale_denominator!) = 5
UNION ALL
SELECT * FROM water_z6
WHERE z(!scale_denominator!) = 6
UNION ALL
SELECT ST_SimplifyPreserveTopology(geom, 200) AS geom FROM water_z8
WHERE z(!scale_denominator!) = 8
UNION ALL
SELECT ST_SimplifyPreserveTopology(geom, 100) AS geom FROM water_z8
WHERE z(!scale_denominator!) BETWEEN 9 AND 10
UNION ALL
SELECT * FROM water_z11
WHERE z(!scale_denominator!) = 11
UNION ALL
SELECT * FROM water_z12
WHERE z(!scale_denominator!) = 12
UNION ALL
SELECT * FROM water_z13
WHERE z(!scale_denominator!) = 13
UNION ALL
SELECT * FROM water_z14
WHERE z(!scale_denominator!) >= 14
) AS water
WHERE geom && !bbox!
) AS data
type: postgis type: postgis
user: osm user: osm
description: Ocean and lake polygons description: Ocean and lake polygons

View File

@ -97,3 +97,49 @@ CREATE OR REPLACE VIEW water_z14 AS (
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
); );
CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry) AS $$
WITH zoom_levels AS (
SELECT * FROM water_z0
WHERE zoom_level = 0
UNION ALL
SELECT * FROM water_z1
WHERE zoom_level = 1
UNION ALL
SELECT * FROM water_z2
WHERE zoom_level = 2
UNION ALL
SELECT * FROM water_z3
WHERE zoom_level = 3
UNION ALL
SELECT * FROM water_z4
WHERE zoom_level = 4
UNION ALL
SELECT * FROM water_z5
WHERE zoom_level = 5
UNION ALL
SELECT * FROM water_z6
WHERE zoom_level = 6
UNION ALL
SELECT ST_SimplifyPreserveTopology(geom, 200) AS geom FROM water_z8
WHERE zoom_level = 8
UNION ALL
SELECT ST_SimplifyPreserveTopology(geom, 100) AS geom FROM water_z8
WHERE zoom_level BETWEEN 9 AND 10
UNION ALL
SELECT * FROM water_z11
WHERE zoom_level = 11
UNION ALL
SELECT * FROM water_z12
WHERE zoom_level = 12
UNION ALL
SELECT * FROM water_z13
WHERE zoom_level = 13
UNION ALL
SELECT * FROM water_z14
WHERE zoom_level >= 14
)
SELECT geom FROM zoom_levels
WHERE geom && bbox;
$$ LANGUAGE SQL;