CTEs always materialise so inline the union zoom level views ⚠️
This commit is contained in:
parent
d53ca84a36
commit
63985fca1e
@ -88,7 +88,7 @@ CREATE OR REPLACE VIEW boundary_z10 AS (
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int)
|
||||
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
|
||||
UNION ALL
|
||||
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
|
||||
SELECT geom, admin_level, scalerank, class
|
||||
FROM boundary_z10 WHERE zoom_level >= 13
|
||||
)
|
||||
SELECT geom, admin_level, scalerank::int, class FROM zoom_levels
|
||||
) AS zoom_levels
|
||||
WHERE geom && bbox;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -8,16 +8,15 @@ CREATE OR REPLACE VIEW building_z14 AS (
|
||||
|
||||
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 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
|
||||
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
|
||||
) AS zoom_levels
|
||||
WHERE way && bbox
|
||||
ORDER BY render_height, ST_YMin(way) DESC;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -27,7 +27,7 @@ CREATE OR REPLACE VIEW country_z5 AS (
|
||||
|
||||
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 $$
|
||||
WITH zoom_levels AS (
|
||||
SELECT geom, name, abbrev, postal, scalerank::int, labelrank::int FROM (
|
||||
SELECT * FROM country_z1
|
||||
WHERE zoom_level = 1
|
||||
UNION ALL
|
||||
@ -39,8 +39,7 @@ RETURNS TABLE(geom geometry, name text, abbrev text, postal text, scalerank int,
|
||||
UNION ALL
|
||||
SELECT * FROM country_z5
|
||||
WHERE zoom_level >= 5
|
||||
)
|
||||
SELECT geom, name, abbrev, postal, scalerank::int, labelrank::int FROM zoom_levels
|
||||
) AS t
|
||||
WHERE geom && bbox
|
||||
ORDER BY scalerank, labelrank, length(name);
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -18,7 +18,7 @@ CREATE OR REPLACE VIEW ice_z5 AS (
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_ice(bbox geometry, zoom_level int)
|
||||
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
|
||||
WHERE zoom_level BETWEEN 0 AND 1
|
||||
UNION ALL
|
||||
@ -27,7 +27,6 @@ RETURNS TABLE(geom geometry, class text) AS $$
|
||||
UNION ALL
|
||||
SELECT * FROM ice_z5
|
||||
WHERE zoom_level BETWEEN 5 AND 8
|
||||
)
|
||||
SELECT geom, type::text AS class FROM zoom_levels
|
||||
) AS zoom_levels
|
||||
WHERE geom && bbox;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -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)
|
||||
RETURNS TABLE(geom geometry, name text, class text, rank text, scalerank int) AS $$
|
||||
WITH zoom_levels AS (
|
||||
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::text, scalerank FROM (
|
||||
SELECT geom, name, class, rank, scalerank,
|
||||
row_number() OVER (
|
||||
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,
|
||||
length(name) DESC
|
||||
) 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
|
||||
)
|
||||
SELECT geom, name, class, rank::text, scalerank FROM ranked_places
|
||||
) AS ranked_places
|
||||
WHERE
|
||||
zoom_level <= 7 OR
|
||||
(zoom_level = 8 AND gridrank <= 4) OR
|
||||
|
||||
@ -124,6 +124,6 @@ RETURNS TABLE(geom geometry, class text) AS $$
|
||||
SELECT * FROM road_z13 WHERE zoom_level = 13
|
||||
UNION ALL
|
||||
SELECT * FROM road_z14 WHERE zoom_level >= 14
|
||||
) AS t
|
||||
) AS zoom_levels
|
||||
WHERE geom && bbox;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -29,16 +29,15 @@ CREATE OR REPLACE VIEW state_z4 AS (
|
||||
|
||||
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 $$
|
||||
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
|
||||
WHERE zoom_level = 3
|
||||
UNION ALL
|
||||
SELECT * FROM state_z4
|
||||
WHERE zoom_level >= 4
|
||||
)
|
||||
SELECT geom,
|
||||
COALESCE(name_local, name_en) AS name_local, name_en,
|
||||
abbrev, postal, scalerank::int, labelrank::int FROM zoom_levels
|
||||
) AS t
|
||||
WHERE geom && bbox
|
||||
ORDER BY scalerank ASC, labelrank ASC, shape_area DESC;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -16,7 +16,7 @@ CREATE OR REPLACE VIEW urban_z6 AS (
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_urban(bbox geometry, zoom_level int)
|
||||
RETURNS TABLE(geom geometry, scalerank int) AS $$
|
||||
WITH zoom_levels AS (
|
||||
SELECT geom, scalerank FROM (
|
||||
SELECT * FROM urban_z4
|
||||
WHERE zoom_level = 4
|
||||
UNION ALL
|
||||
@ -25,7 +25,6 @@ RETURNS TABLE(geom geometry, scalerank int) AS $$
|
||||
UNION ALL
|
||||
SELECT * FROM urban_z6
|
||||
WHERE zoom_level >= 6 AND scalerank-1 <= zoom_level
|
||||
)
|
||||
SELECT geom, scalerank FROM zoom_levels
|
||||
) AS zoom_levels
|
||||
WHERE geom && bbox;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
@ -104,7 +104,7 @@ CREATE OR REPLACE VIEW water_z14 AS (
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int)
|
||||
RETURNS TABLE(geom geometry) AS $$
|
||||
WITH zoom_levels AS (
|
||||
SELECT geom FROM (
|
||||
SELECT * FROM water_z0
|
||||
WHERE zoom_level = 0
|
||||
UNION ALL
|
||||
@ -143,7 +143,6 @@ RETURNS TABLE(geom geometry) AS $$
|
||||
UNION ALL
|
||||
SELECT * FROM water_z14
|
||||
WHERE zoom_level >= 14
|
||||
)
|
||||
SELECT geom FROM zoom_levels
|
||||
) AS zoom_levels
|
||||
WHERE geom && bbox;
|
||||
$$ LANGUAGE SQL IMMUTABLE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user