mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-27 15:05:28 +03:00
Merge pull request #1919 from lonvia/tests-for-ranking
More tests and fixes for address rank computation
This commit is contained in:
commit
1b484fa90d
@ -534,6 +534,7 @@ DECLARE
|
|||||||
|
|
||||||
centroid GEOMETRY;
|
centroid GEOMETRY;
|
||||||
parent_address_level SMALLINT;
|
parent_address_level SMALLINT;
|
||||||
|
place_address_level SMALLINT;
|
||||||
|
|
||||||
addr_street TEXT;
|
addr_street TEXT;
|
||||||
addr_place TEXT;
|
addr_place TEXT;
|
||||||
@ -591,7 +592,11 @@ BEGIN
|
|||||||
IF NEW.class = 'boundary' and NEW.type = 'administrative' THEN
|
IF NEW.class = 'boundary' and NEW.type = 'administrative' THEN
|
||||||
parent_address_level := get_parent_address_level(NEW.geometry, NEW.admin_level);
|
parent_address_level := get_parent_address_level(NEW.geometry, NEW.admin_level);
|
||||||
IF parent_address_level >= NEW.rank_address THEN
|
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;
|
END IF;
|
||||||
ELSE
|
ELSE
|
||||||
parent_address_level := 3;
|
parent_address_level := 3;
|
||||||
@ -828,6 +833,18 @@ BEGIN
|
|||||||
THEN
|
THEN
|
||||||
NEW.importance = linked_importance;
|
NEW.importance = linked_importance;
|
||||||
END IF;
|
END IF;
|
||||||
|
ELSE
|
||||||
|
-- No linked place? As a last resort check if the boundary is tagged with
|
||||||
|
-- a place type and adapt the rank address.
|
||||||
|
IF NEW.rank_address > 0 and NEW.extratags ? 'place' THEN
|
||||||
|
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 and
|
||||||
|
place_address_level < 26 THEN
|
||||||
|
NEW.rank_address := place_address_level;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Initialise the name vector using our name
|
-- Initialise the name vector using our name
|
||||||
@ -844,7 +861,9 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT * FROM insert_addresslines(NEW.place_id, NEW.partition,
|
SELECT * FROM insert_addresslines(NEW.place_id, NEW.partition,
|
||||||
NEW.rank_search, NEW.address,
|
CASE WHEN NEW.rank_address = 0
|
||||||
|
THEN NEW.rank_search ELSE NEW.rank_address END,
|
||||||
|
NEW.address,
|
||||||
CASE WHEN NEW.rank_search >= 26
|
CASE WHEN NEW.rank_search >= 26
|
||||||
AND NEW.rank_search < 30
|
AND NEW.rank_search < 30
|
||||||
THEN NEW.geometry ELSE NEW.centroid END)
|
THEN NEW.geometry ELSE NEW.centroid END)
|
||||||
|
@ -125,73 +125,6 @@ Feature: Import into placex
|
|||||||
| N8 | ca | 25 | 0 |
|
| N8 | ca | 25 | 0 |
|
||||||
| N9 | ca | 25 | 0 |
|
| N9 | ca | 25 | 0 |
|
||||||
|
|
||||||
Scenario: search and address ranks for places are correctly assigned
|
|
||||||
Given the named places
|
|
||||||
| osm | class | type |
|
|
||||||
| N1 | foo | bar |
|
|
||||||
| N11 | place | Continent |
|
|
||||||
| N12 | place | continent |
|
|
||||||
| N13 | place | sea |
|
|
||||||
| N14 | place | country |
|
|
||||||
| N15 | place | state |
|
|
||||||
| N16 | place | region |
|
|
||||||
| N17 | place | county |
|
|
||||||
| N18 | place | city |
|
|
||||||
| N19 | place | island |
|
|
||||||
| N20 | place | town |
|
|
||||||
| N21 | place | village |
|
|
||||||
| N22 | place | hamlet |
|
|
||||||
| N23 | place | municipality |
|
|
||||||
| N24 | place | district |
|
|
||||||
| N26 | place | borough |
|
|
||||||
| N27 | place | suburb |
|
|
||||||
| N28 | place | croft |
|
|
||||||
| N29 | place | subdivision |
|
|
||||||
| N30 | place | isolated_dwelling |
|
|
||||||
| N31 | place | farm |
|
|
||||||
| N32 | place | locality |
|
|
||||||
| N33 | place | islet |
|
|
||||||
| N34 | place | mountain_pass |
|
|
||||||
| N35 | place | neighbourhood |
|
|
||||||
| N36 | place | house |
|
|
||||||
| N37 | place | building |
|
|
||||||
| N38 | place | houses |
|
|
||||||
And the named places
|
|
||||||
| osm | class | type | extra+capital |
|
|
||||||
| N101 | place | city | yes |
|
|
||||||
When importing
|
|
||||||
Then placex contains
|
|
||||||
| object | rank_search | rank_address |
|
|
||||||
| N1 | 30 | 30 |
|
|
||||||
| N11 | 30 | 30 |
|
|
||||||
| N12 | 2 | 0 |
|
|
||||||
| N13 | 2 | 0 |
|
|
||||||
| N14 | 4 | 0 |
|
|
||||||
| N15 | 8 | 0 |
|
|
||||||
| N16 | 18 | 0 |
|
|
||||||
| N17 | 12 | 12 |
|
|
||||||
| N18 | 16 | 16 |
|
|
||||||
| N19 | 17 | 0 |
|
|
||||||
| N20 | 18 | 16 |
|
|
||||||
| N21 | 19 | 16 |
|
|
||||||
| N22 | 20 | 20 |
|
|
||||||
| N23 | 14 | 14 |
|
|
||||||
| N24 | 19 | 16 |
|
|
||||||
| N26 | 18 | 18 |
|
|
||||||
| N27 | 19 | 20 |
|
|
||||||
| N28 | 20 | 20 |
|
|
||||||
| N29 | 20 | 20 |
|
|
||||||
| N30 | 22 | 20 |
|
|
||||||
| N31 | 20 | 0 |
|
|
||||||
| N32 | 20 | 0 |
|
|
||||||
| N33 | 20 | 0 |
|
|
||||||
| N34 | 20 | 0 |
|
|
||||||
| N101 | 15 | 16 |
|
|
||||||
| N35 | 20 | 22 |
|
|
||||||
| N36 | 30 | 30 |
|
|
||||||
| N37 | 30 | 30 |
|
|
||||||
| N38 | 28 | 0 |
|
|
||||||
|
|
||||||
Scenario: search and address ranks for boundaries are correctly assigned
|
Scenario: search and address ranks for boundaries are correctly assigned
|
||||||
Given the named places
|
Given the named places
|
||||||
| osm | class | type |
|
| osm | class | type |
|
||||||
|
115
test/bdd/db/import/rank_computation.feature
Normal file
115
test/bdd/db/import/rank_computation.feature
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
@DB
|
||||||
|
Feature: Rank assignment
|
||||||
|
Tests for assignment of search and address ranks.
|
||||||
|
|
||||||
|
Scenario: Ranks for place nodes are assinged according to thier type
|
||||||
|
Given the named places
|
||||||
|
| osm | class | type |
|
||||||
|
| N1 | foo | bar |
|
||||||
|
| N11 | place | Continent |
|
||||||
|
| N12 | place | continent |
|
||||||
|
| N13 | place | sea |
|
||||||
|
| N14 | place | country |
|
||||||
|
| N15 | place | state |
|
||||||
|
| N16 | place | region |
|
||||||
|
| N17 | place | county |
|
||||||
|
| N18 | place | city |
|
||||||
|
| N19 | place | island |
|
||||||
|
| N36 | place | house |
|
||||||
|
| N38 | place | houses |
|
||||||
|
And the named places
|
||||||
|
| osm | class | type | extra+capital |
|
||||||
|
| N101 | place | city | yes |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | rank_search | rank_address |
|
||||||
|
| N1 | 30 | 30 |
|
||||||
|
| N11 | 30 | 30 |
|
||||||
|
| N12 | 2 | 0 |
|
||||||
|
| N13 | 2 | 0 |
|
||||||
|
| N14 | 4 | 0 |
|
||||||
|
| N15 | 8 | 0 |
|
||||||
|
| N16 | 18 | 0 |
|
||||||
|
| N17 | 12 | 12 |
|
||||||
|
| N18 | 16 | 16 |
|
||||||
|
| N19 | 17 | 0 |
|
||||||
|
| N101 | 15 | 16 |
|
||||||
|
| N36 | 30 | 30 |
|
||||||
|
| N38 | 28 | 0 |
|
||||||
|
|
||||||
|
Scenario: Ranks for boundaries are assigned according to admin level
|
||||||
|
Given the named places
|
||||||
|
| osm | class | type | admin | geometry |
|
||||||
|
| R20 | boundary | administrative | 2 | (1 1, 2 2, 1 2, 1 1) |
|
||||||
|
| R21 | boundary | administrative | 32 | (3 3, 4 4, 3 4, 3 3) |
|
||||||
|
| R22 | boundary | administrative | 6 | (0 0, 1 0, 0 1, 0 0) |
|
||||||
|
| R23 | boundary | administrative | 10 | (0 0, 1 1, 1 0, 0 0) |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | rank_search | rank_address |
|
||||||
|
| R20 | 4 | 4 |
|
||||||
|
| R21 | 30 | 30 |
|
||||||
|
| R22 | 12 | 12 |
|
||||||
|
| R23 | 20 | 20 |
|
||||||
|
|
||||||
|
Scenario: Ranks for boundaries with place assignment go with place address ranks if available
|
||||||
|
Given the named places
|
||||||
|
| osm | class | type | admin | extra+place | geometry |
|
||||||
|
| R20 | boundary | administrative | 3 | state | (1 1, 2 2, 1 2, 1 1) |
|
||||||
|
| R21 | boundary | administrative | 32 | suburb | (3 3, 4 4, 3 4, 3 3) |
|
||||||
|
| R22 | boundary | administrative | 6 | town | (0 0, 1 0, 0 1, 0 0) |
|
||||||
|
| R23 | boundary | administrative | 10 | village | (0 0, 1 1, 1 0, 0 0) |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | rank_search | rank_address |
|
||||||
|
| R20 | 6 | 6 |
|
||||||
|
| R21 | 30 | 20 |
|
||||||
|
| R22 | 12 | 16 |
|
||||||
|
| R23 | 20 | 16 |
|
||||||
|
|
||||||
|
Scenario: Place address ranks cannot overtake a parent address rank
|
||||||
|
Given the named places
|
||||||
|
| osm | class | type | admin | extra+place | geometry |
|
||||||
|
| R20 | boundary | administrative | 8 | town | (0 0, 0 2, 2 2, 2 0, 0 0) |
|
||||||
|
| R21 | boundary | administrative | 9 | municipality | (0 0, 0 1, 1 1, 1 0, 0 0) |
|
||||||
|
| R22 | boundary | administrative | 9 | suburb | (0 0, 0 1, 1 1, 1 0, 0 0) |
|
||||||
|
When importing
|
||||||
|
Then place_addressline contains
|
||||||
|
| object | address | cached_rank_address |
|
||||||
|
| R21 | R20 | 16 |
|
||||||
|
| R22 | R20 | 16 |
|
||||||
|
Then placex contains
|
||||||
|
| object | rank_search | rank_address |
|
||||||
|
| R20 | 16 | 16 |
|
||||||
|
| R21 | 18 | 18 |
|
||||||
|
| R22 | 18 | 20 |
|
||||||
|
|
||||||
|
Scenario: Admin levels cannot overtake each other due to place address ranks
|
||||||
|
Given the named places
|
||||||
|
| osm | class | type | admin | extra+place | geometry |
|
||||||
|
| R20 | boundary | administrative | 6 | town | (0 0, 0 2, 2 2, 2 0, 0 0) |
|
||||||
|
| R21 | boundary | administrative | 8 | | (0 0, 0 1, 1 1, 1 0, 0 0) |
|
||||||
|
| R22 | boundary | administrative | 8 | suburb | (0 0, 0 1, 1 1, 1 0, 0 0) |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | rank_search | rank_address |
|
||||||
|
| R20 | 12 | 16 |
|
||||||
|
| R21 | 16 | 18 |
|
||||||
|
| R22 | 16 | 20 |
|
||||||
|
Then place_addressline contains
|
||||||
|
| object | address | cached_rank_address |
|
||||||
|
| R21 | R20 | 16 |
|
||||||
|
| R22 | R20 | 16 |
|
||||||
|
|
||||||
|
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 |
|
Loading…
Reference in New Issue
Block a user