CTEs always materialise so inline the union zoom level views ⚠️

This commit is contained in:
lukasmartinelli 2016-10-08 21:27:28 +02:00
parent d53ca84a36
commit 63985fca1e
9 changed files with 52 additions and 60 deletions

View File

@ -88,7 +88,7 @@ CREATE OR REPLACE VIEW boundary_z10 AS (
CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, admin_level int, scalerank int, class text) AS $$ RETURNS TABLE(geom geometry, admin_level int, scalerank int, class text) AS $$
WITH zoom_levels AS ( SELECT geom, admin_level, scalerank::int, class FROM (
SELECT * FROM boundary_z0 WHERE zoom_level = 0 SELECT * FROM boundary_z0 WHERE zoom_level = 0
UNION ALL UNION ALL
SELECT * FROM boundary_z1 WHERE zoom_level BETWEEN 1 AND 2 SELECT * FROM boundary_z1 WHERE zoom_level BETWEEN 1 AND 2
@ -118,7 +118,6 @@ RETURNS TABLE(geom geometry, admin_level int, scalerank int, class text) AS $$
UNION ALL UNION ALL
SELECT geom, admin_level, scalerank, class SELECT geom, admin_level, scalerank, class
FROM boundary_z10 WHERE zoom_level >= 13 FROM boundary_z10 WHERE zoom_level >= 13
) ) AS zoom_levels
SELECT geom, admin_level, scalerank::int, class FROM zoom_levels
WHERE geom && bbox; WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -8,16 +8,15 @@ CREATE OR REPLACE VIEW building_z14 AS (
CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, osm_id bigint, render_height float) AS $$ RETURNS TABLE(geom geometry, osm_id bigint, render_height float) AS $$
WITH zoom_levels AS ( SELECT way, osm_id,
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 SELECT osm_id, ST_Simplify(way, 10) AS way, height, levels FROM building_z13
WHERE zoom_level = 13 WHERE zoom_level = 13
UNION ALL UNION ALL
SELECT * FROM building_z14 SELECT * FROM building_z14
WHERE zoom_level >= 14 WHERE zoom_level >= 14
) ) AS zoom_levels
SELECT way, osm_id,
least(greatest(3, COALESCE(height, levels*3.66,5)),400)^.7 AS render_height
FROM zoom_levels
WHERE way && bbox WHERE way && bbox
ORDER BY render_height, ST_YMin(way) DESC; ORDER BY render_height, ST_YMin(way) DESC;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -27,7 +27,7 @@ CREATE OR REPLACE VIEW country_z5 AS (
CREATE OR REPLACE FUNCTION layer_country(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_country(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, name text, abbrev text, postal text, scalerank int, labelrank int) AS $$ RETURNS TABLE(geom geometry, name text, abbrev text, postal text, scalerank int, labelrank int) AS $$
WITH zoom_levels AS ( SELECT geom, name, abbrev, postal, scalerank::int, labelrank::int FROM (
SELECT * FROM country_z1 SELECT * FROM country_z1
WHERE zoom_level = 1 WHERE zoom_level = 1
UNION ALL UNION ALL
@ -39,8 +39,7 @@ RETURNS TABLE(geom geometry, name text, abbrev text, postal text, scalerank int,
UNION ALL UNION ALL
SELECT * FROM country_z5 SELECT * FROM country_z5
WHERE zoom_level >= 5 WHERE zoom_level >= 5
) ) AS t
SELECT geom, name, abbrev, postal, scalerank::int, labelrank::int FROM zoom_levels
WHERE geom && bbox WHERE geom && bbox
ORDER BY scalerank, labelrank, length(name); ORDER BY scalerank, labelrank, length(name);
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -18,7 +18,7 @@ CREATE OR REPLACE VIEW ice_z5 AS (
CREATE OR REPLACE FUNCTION layer_ice(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_ice(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, class text) AS $$ RETURNS TABLE(geom geometry, class text) AS $$
WITH zoom_levels AS ( SELECT geom, type::text AS class FROM (
SELECT ST_Simplify(geom, 80000) AS geom, type FROM ice_z0 SELECT ST_Simplify(geom, 80000) AS geom, type FROM ice_z0
WHERE zoom_level BETWEEN 0 AND 1 WHERE zoom_level BETWEEN 0 AND 1
UNION ALL UNION ALL
@ -27,7 +27,6 @@ RETURNS TABLE(geom geometry, class text) AS $$
UNION ALL UNION ALL
SELECT * FROM ice_z5 SELECT * FROM ice_z5
WHERE zoom_level BETWEEN 5 AND 8 WHERE zoom_level BETWEEN 5 AND 8
) ) AS zoom_levels
SELECT geom, type::text AS class FROM zoom_levels
WHERE geom && bbox; WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -54,37 +54,7 @@ CREATE OR REPLACE VIEW place_z13 AS (
CREATE OR REPLACE FUNCTION layer_place(bbox geometry, zoom_level int, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_place(bbox geometry, zoom_level int, pixel_width numeric)
RETURNS TABLE(geom geometry, name text, class text, rank text, scalerank int) AS $$ RETURNS TABLE(geom geometry, name text, class text, rank text, scalerank int) AS $$
WITH zoom_levels AS ( SELECT geom, name, class, rank::text, scalerank FROM (
SELECT * FROM place_z2
WHERE zoom_level = 2
UNION ALL
SELECT * FROM place_z3
WHERE zoom_level = 3
UNION ALL
SELECT * FROM place_z4
WHERE zoom_level = 4
UNION ALL
SELECT * FROM place_z5
WHERE zoom_level = 5
UNION ALL
SELECT * FROM place_z6
WHERE zoom_level = 6
UNION ALL
SELECT * FROM place_z7
WHERE zoom_level = 7
UNION ALL
SELECT * FROM place_z8
WHERE zoom_level BETWEEN 8 AND 9
UNION ALL
SELECT * FROM place_z10
WHERE zoom_level = 10
UNION ALL
SELECT * FROM place_z11
WHERE zoom_level BETWEEN 11 AND 12
UNION ALL
SELECT * FROM place_z13
WHERE zoom_level >= 13
), ranked_places AS (
SELECT geom, name, class, rank, scalerank, SELECT geom, name, class, rank, scalerank,
row_number() OVER ( row_number() OVER (
PARTITION BY LabelGrid(geom, 150 * pixel_width) PARTITION BY LabelGrid(geom, 150 * pixel_width)
@ -98,10 +68,39 @@ RETURNS TABLE(geom geometry, name text, class text, rank text, scalerank int) AS
population DESC NULLS LAST, population DESC NULLS LAST,
length(name) DESC length(name) DESC
) AS gridrank ) AS gridrank
FROM zoom_levels FROM (
SELECT * FROM place_z2
WHERE zoom_level = 2
UNION ALL
SELECT * FROM place_z3
WHERE zoom_level = 3
UNION ALL
SELECT * FROM place_z4
WHERE zoom_level = 4
UNION ALL
SELECT * FROM place_z5
WHERE zoom_level = 5
UNION ALL
SELECT * FROM place_z6
WHERE zoom_level = 6
UNION ALL
SELECT * FROM place_z7
WHERE zoom_level = 7
UNION ALL
SELECT * FROM place_z8
WHERE zoom_level BETWEEN 8 AND 9
UNION ALL
SELECT * FROM place_z10
WHERE zoom_level = 10
UNION ALL
SELECT * FROM place_z11
WHERE zoom_level BETWEEN 11 AND 12
UNION ALL
SELECT * FROM place_z13
WHERE zoom_level >= 13
) AS zoom_levels
WHERE geom && bbox WHERE geom && bbox
) ) AS ranked_places
SELECT geom, name, class, rank::text, scalerank FROM ranked_places
WHERE WHERE
zoom_level <= 7 OR zoom_level <= 7 OR
(zoom_level = 8 AND gridrank <= 4) OR (zoom_level = 8 AND gridrank <= 4) OR

View File

@ -124,6 +124,6 @@ RETURNS TABLE(geom geometry, class text) AS $$
SELECT * FROM road_z13 WHERE zoom_level = 13 SELECT * FROM road_z13 WHERE zoom_level = 13
UNION ALL UNION ALL
SELECT * FROM road_z14 WHERE zoom_level >= 14 SELECT * FROM road_z14 WHERE zoom_level >= 14
) AS t ) AS zoom_levels
WHERE geom && bbox; WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -29,16 +29,15 @@ CREATE OR REPLACE VIEW state_z4 AS (
CREATE OR REPLACE FUNCTION layer_state(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_state(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, name text, name_en text, abbrev text, postal text, scalerank int, labelrank int) AS $$ RETURNS TABLE(geom geometry, name text, name_en text, abbrev text, postal text, scalerank int, labelrank int) AS $$
WITH zoom_levels AS ( SELECT geom,
COALESCE(name_local, name_en) AS name_local, name_en,
abbrev, postal, scalerank::int, labelrank::int FROM (
SELECT * FROM state_z3 SELECT * FROM state_z3
WHERE zoom_level = 3 WHERE zoom_level = 3
UNION ALL UNION ALL
SELECT * FROM state_z4 SELECT * FROM state_z4
WHERE zoom_level >= 4 WHERE zoom_level >= 4
) ) AS t
SELECT geom,
COALESCE(name_local, name_en) AS name_local, name_en,
abbrev, postal, scalerank::int, labelrank::int FROM zoom_levels
WHERE geom && bbox WHERE geom && bbox
ORDER BY scalerank ASC, labelrank ASC, shape_area DESC; ORDER BY scalerank ASC, labelrank ASC, shape_area DESC;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -16,7 +16,7 @@ CREATE OR REPLACE VIEW urban_z6 AS (
CREATE OR REPLACE FUNCTION layer_urban(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_urban(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, scalerank int) AS $$ RETURNS TABLE(geom geometry, scalerank int) AS $$
WITH zoom_levels AS ( SELECT geom, scalerank FROM (
SELECT * FROM urban_z4 SELECT * FROM urban_z4
WHERE zoom_level = 4 WHERE zoom_level = 4
UNION ALL UNION ALL
@ -25,7 +25,6 @@ RETURNS TABLE(geom geometry, scalerank int) AS $$
UNION ALL UNION ALL
SELECT * FROM urban_z6 SELECT * FROM urban_z6
WHERE zoom_level >= 6 AND scalerank-1 <= zoom_level WHERE zoom_level >= 6 AND scalerank-1 <= zoom_level
) ) AS zoom_levels
SELECT geom, scalerank FROM zoom_levels
WHERE geom && bbox; WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;

View File

@ -104,7 +104,7 @@ CREATE OR REPLACE VIEW water_z14 AS (
CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry) AS $$ RETURNS TABLE(geom geometry) AS $$
WITH zoom_levels AS ( SELECT geom FROM (
SELECT * FROM water_z0 SELECT * FROM water_z0
WHERE zoom_level = 0 WHERE zoom_level = 0
UNION ALL UNION ALL
@ -143,7 +143,6 @@ RETURNS TABLE(geom geometry) AS $$
UNION ALL UNION ALL
SELECT * FROM water_z14 SELECT * FROM water_z14
WHERE zoom_level >= 14 WHERE zoom_level >= 14
) ) AS zoom_levels
SELECT geom FROM zoom_levels
WHERE geom && bbox; WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;