From: Sarah Hoffmann Date: Sun, 9 Aug 2020 09:23:46 +0000 (+0200) Subject: boundary address ranks must not go above 25 X-Git-Tag: v3.6.0~93^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/fb8bb301444bd85bd6ac4ed7fd55a62812fdb3a3 boundary address ranks must not go above 25 Fixes #1914. --- diff --git a/sql/functions/placex_triggers.sql b/sql/functions/placex_triggers.sql index 3faed24b..e1790248 100644 --- a/sql/functions/placex_triggers.sql +++ b/sql/functions/placex_triggers.sql @@ -592,7 +592,11 @@ BEGIN IF NEW.class = 'boundary' and NEW.type = 'administrative' THEN parent_address_level := get_parent_address_level(NEW.geometry, NEW.admin_level); IF parent_address_level >= NEW.rank_address THEN - NEW.rank_address := parent_address_level + 2; + IF parent_address_level >= 24 THEN + NEW.rank_address := 25; + ELSE + NEW.rank_address := parent_address_level + 2; + END IF; END IF; ELSE parent_address_level := 3; @@ -836,7 +840,8 @@ BEGIN SELECT address_rank INTO place_address_level FROM compute_place_rank(NEW.country_code, 'A', 'place', NEW.extratags->'place', 0::SMALLINT, False, null); - IF place_address_level > parent_address_level THEN + IF place_address_level > parent_address_level and + place_address_level < 26 THEN NEW.rank_address := place_address_level; END IF; END IF; diff --git a/test/bdd/db/import/rank_computation.feature b/test/bdd/db/import/rank_computation.feature index 051b1c31..18590520 100644 --- a/test/bdd/db/import/rank_computation.feature +++ b/test/bdd/db/import/rank_computation.feature @@ -101,3 +101,15 @@ Feature: Rank assignment | R21 | 16 | 18 | | R22 | 16 | 20 | + Scenario: Admin levels must not be larger than 25 + Given the named places + | osm | class | type | admin | extra+place | geometry | + | R20 | boundary | administrative | 6 | neighbourhood | (0 0, 0 2, 2 2, 2 0, 0 0) | + | R21 | boundary | administrative | 7 | | (0 0, 0 1, 1 1, 1 0, 0 0) | + | R22 | boundary | administrative | 8 | | (0 0, 0 0.5, 0.5 0.5, 0.5 0, 0 0) | + When importing + Then placex contains + | object | rank_search | rank_address | + | R20 | 12 | 22 | + | R21 | 14 | 24 | + | R22 | 16 | 25 |