]> git.openstreetmap.org Git - nominatim.git/commitdiff
force update of surrounding houses when street name changes
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 27 Sep 2021 08:20:26 +0000 (10:20 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 27 Sep 2021 08:22:41 +0000 (10:22 +0200)
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.

lib-sql/functions/place_triggers.sql
test/bdd/db/update/parenting.feature

index 014c8cd75ea4502373ce12575a99819aa857ceae..219bb6fec3b03c6729c7e9d6b66e0d73a7e51122 100644 (file)
@@ -247,6 +247,7 @@ BEGIN
         indexed_status = 2,
         geometry = NEW.geometry
         where place_id = existingplacex.place_id;
         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'
       -- 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;
 
               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)
     END IF;
 
     -- Abort the add (we modified the existing place instead)
index 99199de4fe24469450570090e50cc344eabbac0a..fdf785c23be86d775b920882c6cb133555397402 100644 (file)
@@ -1,7 +1,7 @@
 @DB
 Feature: Update parenting of objects
 
 @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 |
         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 |
          | 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              |