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)
|
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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -54,7 +54,21 @@ 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 geom, name, class, rank, scalerank,
|
||||||
|
row_number() OVER (
|
||||||
|
PARTITION BY LabelGrid(geom, 150 * pixel_width)
|
||||||
|
ORDER BY scalerank ASC NULLS LAST,
|
||||||
|
CASE class
|
||||||
|
WHEN 'settlement' THEN 10
|
||||||
|
WHEN 'subregion' THEN 5
|
||||||
|
WHEN 'locality' THEN 2 ELSE 1
|
||||||
|
END DESC,
|
||||||
|
rank DESC,
|
||||||
|
population DESC NULLS LAST,
|
||||||
|
length(name) DESC
|
||||||
|
) AS gridrank
|
||||||
|
FROM (
|
||||||
SELECT * FROM place_z2
|
SELECT * FROM place_z2
|
||||||
WHERE zoom_level = 2
|
WHERE zoom_level = 2
|
||||||
UNION ALL
|
UNION ALL
|
||||||
@ -84,24 +98,9 @@ RETURNS TABLE(geom geometry, name text, class text, rank text, scalerank int) AS
|
|||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT * FROM place_z13
|
SELECT * FROM place_z13
|
||||||
WHERE zoom_level >= 13
|
WHERE zoom_level >= 13
|
||||||
), ranked_places AS (
|
) AS zoom_levels
|
||||||
SELECT geom, name, class, rank, scalerank,
|
|
||||||
row_number() OVER (
|
|
||||||
PARTITION BY LabelGrid(geom, 150 * pixel_width)
|
|
||||||
ORDER BY scalerank ASC NULLS LAST,
|
|
||||||
CASE class
|
|
||||||
WHEN 'settlement' THEN 10
|
|
||||||
WHEN 'subregion' THEN 5
|
|
||||||
WHEN 'locality' THEN 2 ELSE 1
|
|
||||||
END DESC,
|
|
||||||
rank DESC,
|
|
||||||
population DESC NULLS LAST,
|
|
||||||
length(name) DESC
|
|
||||||
) AS gridrank
|
|
||||||
FROM 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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user