From 1b148b227799e6c6226e404e65db8c5f2db785f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1?= Date: Tue, 16 Jun 2020 19:50:41 +0200 Subject: [PATCH 1/3] Building aggregation at zoom 13 --- layers/building/building.sql | 4 +- layers/building/building.yaml | 1 + layers/building/etl_diagram.png | Bin 35798 -> 34584 bytes layers/building/mapping.yaml | 13 +-- layers/building/update_building.sql | 125 ++++++++++++++++++++++++++++ 5 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 layers/building/update_building.sql diff --git a/layers/building/building.sql b/layers/building/building.sql index 85025d92b..f67bc77aa 100644 --- a/layers/building/building.sql +++ b/layers/building/building.sql @@ -82,7 +82,7 @@ SELECT geometry, CASE WHEN hide_3d THEN TRUE END AS hide_3d FROM ( SELECT - -- etldoc: osm_building_polygon_gen1 -> layer_building:z13 + -- etldoc: osm_building_block_gen1 -> layer_building:z13 osm_id, geometry, NULL::int AS render_height, @@ -90,7 +90,7 @@ FROM ( NULL::text AS material, NULL::text AS colour, FALSE AS hide_3d - FROM osm_building_polygon_gen1 + FROM osm_building_block_gen1 WHERE zoom_level = 13 AND geometry && bbox UNION ALL diff --git a/layers/building/building.yaml b/layers/building/building.yaml index 1bf360b74..0ec71da3c 100644 --- a/layers/building/building.yaml +++ b/layers/building/building.yaml @@ -20,6 +20,7 @@ layer: hide_3d: | If True, building (part) should not be rendered in 3D. Currently, [building outlines](https://wiki.openstreetmap.org/wiki/Simple_3D_buildings) are marked as hide_3d. schema: + - ./update_building.sql - ./building.sql datasources: - type: imposm3 diff --git a/layers/building/etl_diagram.png b/layers/building/etl_diagram.png index 53f5f042f58da244d6fc97a49a85a624b6008a13..c77cd48fb6a81d6f4911c1290dd9771ab98fbc2b 100644 GIT binary patch literal 34584 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 G&;J7|s|aTR literal 35798 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 Nnl{@YMt|9^{{=Y0$mIY4 diff --git a/layers/building/mapping.yaml b/layers/building/mapping.yaml index ce72b97ce..ac990e6af 100644 --- a/layers/building/mapping.yaml +++ b/layers/building/mapping.yaml @@ -1,9 +1,9 @@ -generalized_tables: - # etldoc: imposm3 -> osm_building_polygon_gen1 - building_polygon_gen1: - source: building_polygon - sql_filter: area>power(ZRES12,2) AND ST_IsValid(geometry) - tolerance: ZRES14 +#generalized_tables: +# # etldoc: imposm3 -> osm_building_polygon_gen1 +# building_polygon_gen1: +# source: building_polygon +# sql_filter: area>power(ZRES12,2) AND ST_IsValid(geometry) +# tolerance: ZRES14 tables: # etldoc: imposm3 -> osm_building_polygon @@ -158,3 +158,4 @@ tables: mapping: type: [building] type: relation_member + \ No newline at end of file diff --git a/layers/building/update_building.sql b/layers/building/update_building.sql new file mode 100644 index 000000000..5c15ae8a6 --- /dev/null +++ b/layers/building/update_building.sql @@ -0,0 +1,125 @@ +DROP TRIGGER IF EXISTS trigger_refresh ON buildings.updates; +DROP TRIGGER IF EXISTS trigger_flag ON osm_building_polygon; + +--creating aggregated building blocks with removed small polygons and small +--holes. Aggregated polygons are simplified. + +--function returning recordset for matview +--returning recordset of buildings aggregates by zres 14, with removed small +--holes and with removed small buildings/blocks +-- + +CREATE OR REPLACE FUNCTION osm_building_block_gen1() + RETURNS table + ( + osm_id bigint, + geometry geometry + ) +AS +$$ +DECLARE + zres14 float := Zres(14); + zres12 float := Zres(12); +BEGIN + FOR osm_id, geometry IN + WITH dta AS ( -- CTE is used because of optimization + SELECT o.osm_id, o.geometry, ST_ClusterDBSCAN(o.geometry, eps := zres14, minpoints := 1) OVER () cid + FROM osm_building_polygon o + ) + SELECT (array_agg(dta.osm_id))[1] osm_id, + ST_Buffer(ST_MemUnion(ST_Buffer(dta.geometry, zres14, 'join=mitre')), -zres14, 'join=mitre') geometry + FROM dta + GROUP BY cid + + LOOP + -- removing holes smaller than + IF ST_NumInteriorRings(geometry) > 0 THEN -- only from geometries wih holes + geometry := ( + -- there are some multi-geometries in this layer + SELECT ST_Collect(gn) + FROM ( + -- in some cases are "holes" NULL, because all holes are smaller than + SELECT COALESCE( + -- exterior ring + ST_MakePolygon(ST_ExteriorRing(dmp.geom), holes), + ST_MakePolygon(ST_ExteriorRing(dmp.geom)) + ) gn + + FROM ST_Dump(geometry) dmp, -- 1 dump polygons + LATERAL ( + SELECT array_agg(ST_Boundary(rg.geom)) holes -- 2 create array + FROM ST_DumpRings(dmp.geom) rg -- 3 from rings + WHERE rg.path[1] > 0 -- 5 except inner ring + AND ST_Area(rg.geom) >= power(zres12, 2) -- 4 bigger than + ) holes + ) new_geom + ); + END IF; + + IF ST_Area(geometry) < power(zres12, 2) THEN + CONTINUE; + END IF; + + -- simplify + geometry := ST_SimplifyPreserveTopology(geometry, zres14::float); + + RETURN NEXT; + END LOOP; +END; +$$ LANGUAGE plpgsql STABLE + STRICT + PARALLEL SAFE; + + +DROP MATERIALIZED VIEW IF EXISTS osm_building_block_gen1; + +CREATE MATERIALIZED VIEW osm_building_block_gen1 AS +SELECT * +FROM osm_building_block_gen1(); + +CREATE INDEX ON osm_building_block_gen1 USING gist (geometry); +CREATE UNIQUE INDEX ON osm_building_block_gen1 USING btree (osm_id); + + +-- Handle updates + +CREATE SCHEMA IF NOT EXISTS buildings; + +CREATE TABLE IF NOT EXISTS buildings.updates +( + id serial PRIMARY KEY, + t text, + UNIQUE (t) +); + +CREATE OR REPLACE FUNCTION buildings.flag() RETURNS trigger AS +$$ +BEGIN + INSERT INTO buildings.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN NULL; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION buildings.refresh() RETURNS trigger AS +$$ +BEGIN + RAISE LOG 'Refresh buildings block'; + REFRESH MATERIALIZED VIEW osm_building_block_gen1; + -- noinspection SqlWithoutWhere + DELETE FROM buildings.updates; + RETURN NULL; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE + ON osm_building_polygon + FOR EACH STATEMENT +EXECUTE PROCEDURE buildings.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT + ON buildings.updates + INITIALLY DEFERRED + FOR EACH ROW +EXECUTE PROCEDURE buildings.refresh(); \ No newline at end of file From 2ba77811e47d3d80f4c2cd2feeb16bc18d950684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1?= Date: Tue, 16 Jun 2020 19:53:58 +0200 Subject: [PATCH 2/3] remove last empty line --- layers/building/building.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers/building/building.yaml b/layers/building/building.yaml index 0ec71da3c..ea2bc6786 100644 --- a/layers/building/building.yaml +++ b/layers/building/building.yaml @@ -24,4 +24,4 @@ schema: - ./building.sql datasources: - type: imposm3 - mapping_file: ./mapping.yaml + mapping_file: ./mapping.yaml \ No newline at end of file From 9d3f813964722690f1259997c74d843a3685ca36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1?= Date: Tue, 16 Jun 2020 19:55:30 +0200 Subject: [PATCH 3/3] remove last empty line --- layers/building/mapping.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/layers/building/mapping.yaml b/layers/building/mapping.yaml index ac990e6af..858899ba6 100644 --- a/layers/building/mapping.yaml +++ b/layers/building/mapping.yaml @@ -157,5 +157,4 @@ tables: type: member_type mapping: type: [building] - type: relation_member - \ No newline at end of file + type: relation_member \ No newline at end of file