diff --git a/layers/park/etl_diagram.png b/layers/park/etl_diagram.png index 82e6ccd0..ad61798e 100644 Binary files a/layers/park/etl_diagram.png and b/layers/park/etl_diagram.png differ diff --git a/layers/park/mapping.yaml b/layers/park/mapping.yaml index 0fa51e2f..746803c2 100644 --- a/layers/park/mapping.yaml +++ b/layers/park/mapping.yaml @@ -1,33 +1,45 @@ generalized_tables: + # etldoc: osm_park_polygon_gen_z5 -> osm_park_polygon_gen_z4 + park_polygon_gen_z4: + source: park_polygon_gen_z5 + sql_filter: area>power(ZRES3,2) + tolerance: ZRES4 + + # etldoc: osm_park_polygon_gen_z6 -> osm_park_polygon_gen_z5 + park_polygon_gen_z5: + source: park_polygon_gen_z6 + sql_filter: area>power(ZRES4,2) + tolerance: ZRES5 + # etldoc: osm_park_polygon_gen_z7 -> osm_park_polygon_gen_z6 park_polygon_gen_z6: source: park_polygon_gen_z7 sql_filter: area>power(ZRES5,2) - tolerance: ZRES8 + tolerance: ZRES6 # etldoc: osm_park_polygon_gen_z8 -> osm_park_polygon_gen_z7 park_polygon_gen_z7: source: park_polygon_gen_z8 sql_filter: area>power(ZRES6,2) - tolerance: ZRES8 + tolerance: ZRES7 # etldoc: osm_park_polygon_gen_z9 -> osm_park_polygon_gen_z8 park_polygon_gen_z8: source: park_polygon_gen_z9 sql_filter: area>power(ZRES7,2) - tolerance: ZRES9 + tolerance: ZRES8 # etldoc: osm_park_polygon_gen_z10 -> osm_park_polygon_gen_z9 park_polygon_gen_z9: source: park_polygon_gen_z10 sql_filter: area>power(ZRES8,2) - tolerance: ZRES10 + tolerance: ZRES9 # etldoc: osm_park_polygon_gen_z11 -> osm_park_polygon_gen_z10 park_polygon_gen_z10: source: park_polygon_gen_z11 sql_filter: area>power(ZRES9,2) - tolerance: ZRES11 + tolerance: ZRES10 # etldoc: osm_park_polygon_gen_z12 -> osm_park_polygon_gen_z11 park_polygon_gen_z11: diff --git a/layers/park/park.sql b/layers/park/park.sql index 91e9193a..8e3d2ed6 100644 --- a/layers/park/park.sql +++ b/layers/park/park.sql @@ -1,5 +1,5 @@ -- etldoc: layer_park[shape=record fillcolor=lightpink, style="rounded,filled", --- etldoc: label="layer_park | z6 | z7 | z8 | z9 | z10 | z11 | z12| z13| z14+" ] ; +-- etldoc: label="layer_park | z4 | z5 | z6 | z7 | z8 | z9 | z10 | z11 | z12| z13| z14+" ] ; CREATE OR REPLACE FUNCTION layer_park(bbox geometry, zoom_level int, pixel_width numeric) RETURNS TABLE @@ -37,6 +37,34 @@ FROM ( tags, NULL::int AS rank FROM ( + -- etldoc: osm_park_polygon_dissolve_z4 -> layer_park:z4 + SELECT NULL::int AS osm_id, + geometry, + NULL AS name, + NULL AS name_en, + NULL AS name_de, + NULL AS tags, + NULL AS leisure, + NULL AS boundary, + NULL AS protection_title + FROM osm_park_polygon_dissolve_z4 + WHERE zoom_level = 4 + AND geometry && bbox + UNION ALL + -- etldoc: osm_park_polygon_gen_z5 -> layer_park:z5 + SELECT osm_id, + geometry, + name, + name_en, + name_de, + tags, + leisure, + boundary, + protection_title + FROM osm_park_polygon_gen_z5 + WHERE zoom_level = 5 + AND geometry && bbox + UNION ALL -- etldoc: osm_park_polygon_gen_z6 -> layer_park:z6 SELECT osm_id, geometry, @@ -184,6 +212,23 @@ FROM ( area DESC )::int AS "rank" FROM ( + -- etldoc: osm_park_polygon_gen_z5 -> layer_park:z5 + SELECT osm_id, + geometry_point, + name, + name_en, + name_de, + tags, + leisure, + boundary, + protection_title, + area + FROM osm_park_polygon_gen_z5 + WHERE zoom_level = 5 + AND geometry_point && bbox + AND area > 70000*2^(20-zoom_level) + UNION ALL + -- etldoc: osm_park_polygon_gen_z6 -> layer_park:z6 SELECT osm_id, geometry_point, diff --git a/layers/park/update_park_polygon.sql b/layers/park/update_park_polygon.sql index 3f30b6f4..02828cce 100644 --- a/layers/park/update_park_polygon.sql +++ b/layers/park/update_park_polygon.sql @@ -16,6 +16,18 @@ ALTER TABLE osm_park_polygon_gen_z7 ADD COLUMN IF NOT EXISTS geometry_point geometry; ALTER TABLE osm_park_polygon_gen_z6 ADD COLUMN IF NOT EXISTS geometry_point geometry; +ALTER TABLE osm_park_polygon_gen_z5 + ADD COLUMN IF NOT EXISTS geometry_point geometry; + +-- etldoc: osm_park_polygon_dissolve_z4 -> osm_park_polygon_gen_z4 +DROP MATERIALIZED VIEW IF EXISTS osm_park_polygon_dissolve_z4 CASCADE; +CREATE MATERIALIZED VIEW osm_park_polygon_dissolve_z4 AS +( + SELECT + (ST_Dump( + ST_Union(geometry))).geom AS geometry + FROM osm_park_polygon_gen_z4 +); DROP TRIGGER IF EXISTS update_row ON osm_park_polygon; DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z13; @@ -26,6 +38,8 @@ DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z9; DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z8; DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z7; DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z6; +DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z5; +DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z4; -- etldoc: osm_park_polygon -> osm_park_polygon -- etldoc: osm_park_polygon_gen_z13 -> osm_park_polygon_gen_z13 @@ -36,6 +50,8 @@ DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z6; -- etldoc: osm_park_polygon_gen_z8 -> osm_park_polygon_gen_z8 -- etldoc: osm_park_polygon_gen_z7 -> osm_park_polygon_gen_z7 -- etldoc: osm_park_polygon_gen_z6 -> osm_park_polygon_gen_z6 +-- etldoc: osm_park_polygon_gen_z5 -> osm_park_polygon_gen_z5 +-- etldoc: osm_park_polygon_gen_z4 -> osm_park_polygon_gen_z4 CREATE OR REPLACE FUNCTION update_osm_park_polygon() RETURNS void AS $$ BEGIN @@ -75,6 +91,11 @@ BEGIN SET tags = update_tags(tags, geometry), geometry_point = st_centroid(geometry); + UPDATE osm_park_polygon_gen_z5 + SET tags = update_tags(tags, geometry), + geometry_point = st_centroid(geometry); + + REFRESH MATERIALIZED VIEW osm_park_polygon_dissolve_z4; END; $$ LANGUAGE plpgsql; @@ -88,7 +109,9 @@ CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z9_point_geom_idx ON osm_park_po CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z8_point_geom_idx ON osm_park_polygon_gen_z8 USING gist (geometry_point); CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z7_point_geom_idx ON osm_park_polygon_gen_z7 USING gist (geometry_point); CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z6_point_geom_idx ON osm_park_polygon_gen_z6 USING gist (geometry_point); - +CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z5_point_geom_idx ON osm_park_polygon_gen_z5 USING gist (geometry_point); +CREATE INDEX IF NOT EXISTS osm_park_polygon_gen_z4_polygon_geom_idx ON osm_park_polygon_gen_z4 USING gist (geometry); +CREATE INDEX IF NOT EXISTS osm_park_polygon_dissolve_z4_polygon_geom_idx ON osm_park_polygon_dissolve_z4 USING gist (geometry); CREATE OR REPLACE FUNCTION update_osm_park_polygon_row() RETURNS trigger @@ -154,3 +177,16 @@ CREATE TRIGGER update_row ON osm_park_polygon_gen_z6 FOR EACH ROW EXECUTE PROCEDURE update_osm_park_polygon_row(); + +CREATE TRIGGER update_row + BEFORE INSERT OR UPDATE + ON osm_park_polygon_gen_z5 + FOR EACH ROW +EXECUTE PROCEDURE update_osm_park_polygon_row(); + +CREATE TRIGGER update_row + BEFORE INSERT OR UPDATE + ON osm_park_polygon_gen_z4 + FOR EACH ROW +EXECUTE PROCEDURE update_osm_park_polygon_row(); +