From: Sarah Hoffmann Date: Mon, 27 Sep 2021 08:20:26 +0000 (+0200) Subject: force update of surrounding houses when street name changes X-Git-Tag: v4.0.0~26^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/316205e4554e0c056015ade0f2e02955ef659b78 force update of surrounding houses when street name changes When the street changes its name then this may cause changes in the parenting of rank-30 objects with an addr:street tag. Fixes #2242. --- diff --git a/lib-sql/functions/place_triggers.sql b/lib-sql/functions/place_triggers.sql index 014c8cd7..219bb6fe 100644 --- a/lib-sql/functions/place_triggers.sql +++ b/lib-sql/functions/place_triggers.sql @@ -247,6 +247,7 @@ BEGIN indexed_status = 2, geometry = NEW.geometry where place_id = existingplacex.place_id; + -- if a node(=>house), which is part of a interpolation line, changes (e.g. the street attribute) => mark this line for reparenting -- (already here, because interpolation lines are reindexed before nodes, so in the second call it would be too late) IF NEW.osm_type='N' @@ -270,6 +271,18 @@ BEGIN and x.class = p.class; END IF; + -- When streets change their name, the parenting of rank30 objects may change. + IF existingplacex.rank_address between 26 and 27 + and coalesce(existing.name::text, '') != coalesce(NEW.name::text, '') + THEN + UPDATE placex SET indexed_status = 2 + WHERE indexed_status = 0 and address ? 'street' + and parent_place_id = existingplacex.place_id; + UPDATE placex SET indexed_status = 2 + WHERE indexed_status = 0 and rank_search = 30 and address ? 'street' + and ST_DWithin(NEW.geometry, geometry, 0.002); + END IF; + END IF; -- Abort the add (we modified the existing place instead) diff --git a/test/bdd/db/update/parenting.feature b/test/bdd/db/update/parenting.feature index 99199de4..fdf785c2 100644 --- a/test/bdd/db/update/parenting.feature +++ b/test/bdd/db/update/parenting.feature @@ -1,7 +1,7 @@ @DB Feature: Update parenting of objects -Scenario: POI inside building inherits addr:street change + Scenario: POI inside building inherits addr:street change Given the scene building-on-street-corner And the named places | osm | class | type | geometry | @@ -34,3 +34,27 @@ Scenario: POI inside building inherits addr:street change | N1 | W3 | 3 | | N2 | W3 | 3 | | N3 | W3 | 3 | + + Scenario: Housenumber is reparented when street gets name matching addr:street + Given the grid + | 1 | | | 2 | + | | 10 | | | + | | | | | + | 3 | | | 4 | + And the places + | osm | class | type | name | geometry | + | W1 | highway | residential | A street | 1,2 | + | W2 | highway | residential | B street | 3,4 | + And the places + | osm | class | type | housenr | street | geometry | + | N1 | building | yes | 3 | X street | 10 | + When importing + Then placex contains + | object | parent_place_id | + | N1 | W1 | + When updating places + | osm | class | type | name | geometry | + | W2 | highway | residential | X street | 3,4 | + Then placex contains + | object | parent_place_id | + | N1 | W2 |