]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #2087 from lonvia/only-one-link-per-node
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 2 Dec 2020 21:16:56 +0000 (22:16 +0100)
committerGitHub <noreply@github.com>
Wed, 2 Dec 2020 21:16:56 +0000 (22:16 +0100)
Place nodes can only be linked once against boundaries

sql/functions/placex_triggers.sql
test/bdd/db/import/linking.feature

index e80f14cb6033f7582a59a007670d381c0c3bc882..ea9474e4bb469546045d9ea716ccda6241518c83 100644 (file)
@@ -183,6 +183,7 @@ BEGIN
       WHERE make_standard_name(name->'name') = bnd_name
         AND placex.class = 'place' AND placex.type = bnd.extratags->'place'
         AND placex.osm_type = 'N'
+        AND placex.linked_place_id is null
         AND placex.rank_search < 26 -- needed to select the right index
         AND _st_covers(bnd.geometry, placex.geometry)
     LOOP
@@ -197,6 +198,7 @@ BEGIN
       WHERE placex.class = 'place' AND placex.osm_type = 'N'
         AND placex.extratags ? 'wikidata' -- needed to select right index
         AND placex.extratags->'wikidata' = bnd.extratags->'wikidata'
+        AND placex.linked_place_id is null
         AND placex.rank_search < 26
         AND _st_covers(bnd.geometry, placex.geometry)
       ORDER BY make_standard_name(name->'name') = bnd_name desc
@@ -219,6 +221,7 @@ BEGIN
                                                          false, placex.postcode)).address_rank)
              OR (bnd.rank_address = 0 and placex.rank_search = bnd.rank_search))
         AND placex.osm_type = 'N'
+        AND placex.linked_place_id is null
         AND placex.rank_search < 26 -- needed to select the right index
         AND _st_covers(bnd.geometry, placex.geometry)
     LOOP
index 1e0d131a385abf896ca098ab429e0af5ea44b5d3..e2696e637098dab0d316c487d0764e348e93ca9c 100644 (file)
@@ -231,3 +231,21 @@ Feature: Linking of places
         And placex contains
          | object | centroid |
          | R13    | in geometry  |
+
+    Scenario: Place nodes can only be linked once
+        Given the named places
+         | osm  | class    | type | extra+wikidata | geometry |
+         | N2   | place    | city | Q1234          | 0 0 |
+        And the named places
+         | osm  | class    | type           | extra+wikidata | admin | geometry |
+         | R1   | boundary | administrative | Q1234          | 8     | poly-area:0.1 |
+         | R2   | boundary | administrative | Q1234          | 9     | poly-area:0.01 |
+        When importing
+        Then placex contains
+         | object | linked_place_id |
+         | N2     | R1              |
+        And placex contains
+         | object | extratags                |
+         | R1     | 'linked_place' : 'city', 'wikidata': 'Q1234'  |
+         | R2     | 'wikidata': 'Q1234'                     |
+