From 9785aff76c31e220a57ac533cdb66620307964a5 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Wed, 7 Jun 2017 21:32:02 +0200 Subject: [PATCH] restrict linked places to place nodes Avoids getting the wrong entry when the linked place has double tagging. Fixes #573. --- sql/functions.sql | 6 ++++-- test/bdd/db/import/linking.feature | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/sql/functions.sql b/sql/functions.sql index a49ba02b..1d83e653 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -1492,7 +1492,8 @@ BEGIN FOR relMember IN select get_osm_rel_members(relation_members,ARRAY['label']) as member LOOP FOR linkedPlacex IN select * from placex where osm_type = upper(substring(relMember.member,1,1))::char(1) - and osm_id = substring(relMember.member,2,10000)::bigint order by rank_search desc limit 1 LOOP + and osm_id = substring(relMember.member,2,10000)::bigint + and class = 'place' order by rank_search desc limit 1 LOOP -- If we don't already have one use this as the centre point of the geometry IF NEW.centroid IS NULL THEN @@ -1523,7 +1524,8 @@ BEGIN FOR relMember IN select get_osm_rel_members(relation_members,ARRAY['admin_center','admin_centre']) as member LOOP FOR linkedPlacex IN select * from placex where osm_type = upper(substring(relMember.member,1,1))::char(1) - and osm_id = substring(relMember.member,2,10000)::bigint order by rank_search desc limit 1 LOOP + and osm_id = substring(relMember.member,2,10000)::bigint + and class = 'place' order by rank_search desc limit 1 LOOP -- For an admin centre we also want a name match - still not perfect, for example 'new york, new york' -- But that can be fixed by explicitly setting the label in the data diff --git a/test/bdd/db/import/linking.feature b/test/bdd/db/import/linking.feature index 0954ed4e..ecb1c9df 100644 --- a/test/bdd/db/import/linking.feature +++ b/test/bdd/db/import/linking.feature @@ -108,3 +108,22 @@ Feature: Linking of places Then results contain | osm_type | | W | + + # github #573 + Scenario: Boundaries should only be linked to places + Given the named places + | osm | class | type | extra+wikidata | admin | geometry | + | R1 | boundary | administrative | 34 | 8 | poly-area:0.1 | + And the named places + | osm | class | type | geometry | + | N3 | natural | island | 0.00001 0 | + | N3 | place | city | 0.00001 0 | + And the relations + | id | members | + | 1 | N3:label | + When importing + Then placex contains + | object | linked_place_id | + | N3:natural | - | + | N3:place | R1 | + -- 2.39.5