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

@ -55,45 +55,91 @@ CREATE OR REPLACE VIEW water_z6 AS (
CREATE OR REPLACE VIEW water_z8 AS ( CREATE OR REPLACE VIEW water_z8 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
WHERE way_area > 1000000 WHERE way_area > 1000000
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
WHERE waterway IN ('river') AND ST_Length(way) > 10000 WHERE waterway IN ('river') AND ST_Length(way) > 10000
); );
CREATE OR REPLACE VIEW water_z9 AS ( CREATE OR REPLACE VIEW water_z9 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
WHERE way_area > 500000 WHERE way_area > 500000
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
WHERE waterway IN ('river') AND ST_Length(way) > 5000 WHERE waterway IN ('river') AND ST_Length(way) > 5000
); );
CREATE OR REPLACE VIEW water_z11 AS ( CREATE OR REPLACE VIEW water_z11 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
WHERE way_area > 50000 WHERE way_area > 50000
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
WHERE waterway IN ('river') WHERE waterway IN ('river')
); );
CREATE OR REPLACE VIEW water_z12 AS ( CREATE OR REPLACE VIEW water_z12 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
WHERE way_area > 40000 WHERE way_area > 40000
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
WHERE waterway IN ('river', 'canal', 'stream') WHERE waterway IN ('river', 'canal', 'stream')
); );
CREATE OR REPLACE VIEW water_z13 AS ( CREATE OR REPLACE VIEW water_z13 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
WHERE way_area > 2000 WHERE way_area > 2000
UNION ALL UNION ALL
SELECT way AS geom FROM waterways SELECT way AS geom FROM waterways
WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch')
); );
CREATE OR REPLACE VIEW water_z14 AS ( CREATE OR REPLACE VIEW water_z14 AS (
SELECT way AS geom FROM water_areas SELECT way AS geom FROM water_areas
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;