Refactor water into table function

pull/24/head
lukasmartinelli 2016-10-08 16:34:46 +02:00
rodzic dea365463f
commit c3aa9ae0a8
2 zmienionych plików z 65 dodań i 62 usunięć

Wyświetl plik

@ -23,51 +23,8 @@ Layer:
max_size: 512
password: osm
port: 5432
srid: ''
table: |-
( 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
srid: 900913
table: (SELECT * FROM layer_water(!bbox!, z(!scale_denominator!))) AS t
type: postgis
user: osm
description: Ocean and lake polygons

Wyświetl plik

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