]> git.openstreetmap.org Git - nominatim.git/commitdiff
move linked place type into linked_place extratags
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 9 Feb 2020 21:26:53 +0000 (22:26 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 28 Feb 2020 14:22:48 +0000 (15:22 +0100)
Using linked_place means that we don't overwrite any
place tags on the boundary. This is important when we
wanto to use the information for linking.

sql/functions/address_lookup.sql
sql/functions/placex_triggers.sql
test/bdd/db/import/linking.feature
test/bdd/db/update/linked_places.feature

index b1b4c4da2281ee06e1947808366c1c8805451604..8436fdb190913d99d45400e1e225fd17d7db72ab 100644 (file)
@@ -202,8 +202,9 @@ BEGIN
 
   FOR location IN
     SELECT placex.place_id, osm_type, osm_id, name,
-           CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class,
-           CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type,
+           CASE WHEN extratags ? 'place' or extratags ? 'linked_place'
+                THEN 'place' ELSE class END as class,
+           coalesce(extratags->'place', extratags->'linked_place', type) as type,
            admin_level, fromarea, isaddress,
            CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
            distance, country_code, postcode
index ffc83fa3aa03197e9a3ca22ac32cfbcbf219a12d..f301f4244bf4b1b5a682ea4214f51d3585d048e2 100644 (file)
@@ -818,7 +818,7 @@ BEGIN
   --DEBUG: RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;
   SELECT * INTO location FROM find_linked_place(NEW);
   IF location.place_id is not null THEN
-      --DEBUG: RAISE WARNING 'Linked %', location;
+    --DEBUG: RAISE WARNING 'Linked %', location;
 
     -- Use this as the centre point of the geometry
     NEW.centroid := coalesce(location.centroid,
@@ -830,7 +830,7 @@ BEGIN
     END IF;
 
     -- merge in extra tags
-    NEW.extratags := hstore(location.class, location.type)
+    NEW.extratags := hstore('linked_' || location.class, location.type)
                      || coalesce(location.extratags, ''::hstore)
                      || coalesce(NEW.extratags, ''::hstore);
 
index ceb455865a776875a56b1c3e4fcbb315d17d4378..c6381792be8a3e7cb5291449ccb364ec6b472467 100644 (file)
@@ -127,3 +127,19 @@ Feature: Linking of places
          | N3:natural | -               |
          | N3:place   | R1              |
 
+    Scenario: Nodes with 'role' label are always linked
+        Given the places
+         | osm  | class    | type           | admin | name  | geometry |
+         | R13  | boundary | administrative | 6     | Garbo | poly-area:0.1 |
+         | N2   | place    | hamlet         | 15    | Vario | 0.006 0.00001 |
+        And the relations
+         | id | members       | tags+type |
+         | 13 | N2:label      | boundary |
+        When importing
+        Then placex contains
+         | object  | linked_place_id |
+         | N2      | R13 |
+        And placex contains
+         | object | centroid      | name+name | extratags+linked_place |
+         | R13    | 0.006 0.00001 | Garbo     | hamlet |
+
index 6c31bd8920b45710dbab76099738e02b3651f13c..647d5eafa1ea37db93585603af4be09a65fd38ea 100644 (file)
@@ -125,11 +125,11 @@ Feature: Updates of linked places
         When importing
         Then placex contains
          | object | extratags |
-         | R1     | 'wikidata' : '34', 'place' : 'city' |
+         | R1     | 'wikidata' : '34', 'linked_place' : 'city' |
         When updating places
          | osm | class    | type        | name    | extra+oneway | admin | geometry |
          | N3  | place    | city        | newname | yes          | 30    | 0.00001 0 |
         Then placex contains
          | object | extratags |
-         | R1     | 'wikidata' : '34', 'oneway' : 'yes', 'place' : 'city' |
+         | R1     | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |