mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
Rank 30 objects usually use the address parts of their parent. When the parent has address parts that are areas but not marked as isaddress, then the parent might go through multiple administrative areas. In that case recheck if the right area has been choosen for the object in question instead of relying on isaddress. Note that we really only have to do the recomputation in the case of 'isarea = True and isaddress = False' which hopefully keeps the number of additional geometric operations we have to do to a minimum. There is one more special case to be taken into account here: a street may go through two administrative areas and a house along that street is placed in one of the area while the addr:* tags says it belongs to the other. In that case we must not switch the isaddress to the one it is situated. To avoid that recheck the address names against the name of the ara. That is not perfect but should cover most cases. Fixes #328.
432 lines
18 KiB
Gherkin
432 lines
18 KiB
Gherkin
@DB
|
|
Feature: Address computation
|
|
Tests for filling of place_addressline
|
|
|
|
Scenario: place nodes are added to the address when they are close enough
|
|
Given the 0.002 grid
|
|
| 2 | | | | | | 1 | | 3 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| N1 | place | square | 1 |
|
|
| N2 | place | hamlet | 2 |
|
|
| N3 | place | hamlet | 3 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | fromarea |
|
|
| N1 | N3 | False |
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| N1 | N2 |
|
|
|
|
Scenario: given two place nodes, the closer one wins for the address
|
|
Given the grid
|
|
| 2 | | | 1 | | 3 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| N1 | place | square | 1 |
|
|
| N2 | place | hamlet | 2 |
|
|
| N3 | place | hamlet | 3 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | fromarea | isaddress |
|
|
| N1 | N3 | False | True |
|
|
| N1 | N2 | False | False |
|
|
|
|
Scenario: boundaries around the place are added to the address
|
|
Given the grid
|
|
| 1 | | 4 | | 7 | 10 |
|
|
| 2 | | 5 | | 8 | 11 |
|
|
| | | | | | |
|
|
| | | | | | |
|
|
| | | 6 | | 9 | |
|
|
| | 99 | | | | |
|
|
| 3 | | | | | 12 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| R1 | boundary | administrative | 3 | (1,2,3,12,11,10,7,8,9,6,5,4,1) |
|
|
| R2 | boundary | administrative | 4 | (2,3,12,11,8,9,6,5,2) |
|
|
| N1 | place | square | 15 | 99 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| N1 | R1 | True |
|
|
| N1 | R2 | True |
|
|
|
|
Scenario: with boundaries of same rank the one with the closer centroid is prefered
|
|
Given the grid
|
|
| 1 | | | 3 | | 5 |
|
|
| | 9 | | | | |
|
|
| 2 | | | 4 | | 6 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| R1 | boundary | administrative | 8 | (1,2,4,3,1) |
|
|
| R2 | boundary | administrative | 8 | (1,2,6,5,1) |
|
|
| N1 | place | square | 15 | 9 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| N1 | R1 | True |
|
|
| N1 | R2 | False |
|
|
|
|
Scenario: boundary areas are preferred over place nodes in the address
|
|
Given the grid
|
|
| 1 | | | | | | 3 |
|
|
| | 5 | | | | | |
|
|
| | 6 | | | | | |
|
|
| 2 | | | | | | 4 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| N1 | place | square | 15 | 5 |
|
|
| N2 | place | city | 15 | 6 |
|
|
| R1 | place | city | 8 | (1,2,4,3,1) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress | cached_rank_address |
|
|
| N1 | R1 | True | 16 |
|
|
| N1 | N2 | False | 16 |
|
|
|
|
Scenario: place nodes outside a smaller ranked area are ignored
|
|
Given the grid
|
|
| 1 | | 2 | |
|
|
| | 7 | | 9 |
|
|
| 4 | | 3 | |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| N1 | place | square | 15 | 7 |
|
|
| N2 | place | city | 15 | 9 |
|
|
| R1 | place | city | 8 | (1,2,3,4,1) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress | cached_rank_address |
|
|
| N1 | R1 | True | 16 |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| N1 | N2 |
|
|
|
|
|
|
Scenario: place nodes close enough to smaller ranked place nodes are included
|
|
Given the 0.002 grid
|
|
| 2 | | 3 | 1 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| N1 | place | square | 1 |
|
|
| N2 | place | hamlet | 2 |
|
|
| N3 | place | quarter | 3 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | fromarea | isaddress |
|
|
| N1 | N2 | False | True |
|
|
| N1 | N3 | False | True |
|
|
|
|
|
|
Scenario: place nodes too far away from a smaller ranked place nodes are marked non-address
|
|
Given the 0.002 grid
|
|
| 2 | | | 1 | | 3 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| N1 | place | square | 1 |
|
|
| N2 | place | hamlet | 2 |
|
|
| N3 | place | quarter | 3 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | fromarea | isaddress |
|
|
| N1 | N2 | False | True |
|
|
| N1 | N3 | False | False |
|
|
|
|
|
|
# github #121
|
|
Scenario: Roads crossing boundaries should contain both states
|
|
Given the grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | 7 | | | 8 | |
|
|
| 4 | | | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | highway | road | 7, 8 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (1, 2, 5, 4, 1) |
|
|
| W11 | boundary | administrative | 5 | (2, 3, 6, 5, 2) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | cached_rank_address |
|
|
| W1 | W10 | 10 |
|
|
| W1 | W11 | 10 |
|
|
|
|
|
|
Scenario: Roads following a boundary should contain both states
|
|
Given the grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | | 8 | 7 | | |
|
|
| 4 | | | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | highway | road | 2, 7, 8 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (1, 2, 5, 4, 1) |
|
|
| W11 | boundary | administrative | 5 | (2, 3, 6, 5, 2) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | cached_rank_address |
|
|
| W1 | W10 | 10 |
|
|
| W1 | W11 | 10 |
|
|
|
|
Scenario: Roads should not contain boundaries they touch in a end point
|
|
Given the grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | 7 | | 8 | | |
|
|
| 4 | | | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | highway | road | 7, 8 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (1, 2, 8, 5, 4, 1) |
|
|
| W11 | boundary | administrative | 5 | (2, 3, 6, 5, 8, 2) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | cached_rank_address |
|
|
| W1 | W10 | 10 |
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| W1 | W11 |
|
|
|
|
Scenario: Roads should not contain boundaries they touch in a middle point
|
|
Given the grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | 7 | | 8 | | |
|
|
| 4 | | 9 | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | highway | road | 7, 8, 9 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (1, 2, 8, 5, 4, 1) |
|
|
| W11 | boundary | administrative | 5 | (2, 3, 6, 5, 8, 2) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | cached_rank_address |
|
|
| W1 | W10 | 10 |
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| W1 | W11 |
|
|
|
|
Scenario: Locality points should contain all boundaries they touch
|
|
Given the 0.001 grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | | | 8 | | |
|
|
| 4 | | | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| N1 | place | locality | 8 |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (1, 2, 8, 5, 4, 1) |
|
|
| W11 | boundary | administrative | 5 | (2, 3, 6, 5, 8, 2) |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | cached_rank_address |
|
|
| N1 | W10 | 10 |
|
|
| N1 | W11 | 10 |
|
|
|
|
Scenario: Areas should not contain boundaries they touch
|
|
Given the grid
|
|
| 1 | | | 2 | | 3 |
|
|
| | | | | | |
|
|
| 4 | | | 5 | | 6 |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | landuse | industrial | (1, 2, 5, 4, 1) |
|
|
And the named places
|
|
| osm | class | type | admin | geometry |
|
|
| W10 | boundary | administrative | 5 | (2, 3, 6, 5, 2) |
|
|
When importing
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| W1 | W10 |
|
|
|
|
Scenario: buildings with only addr:postcodes do not appear in the address of a way
|
|
Given the scene admin-areas
|
|
And the named places
|
|
| osm | class | type | admin | addr+postcode | geometry |
|
|
| R1 | boundary | administrative | 6 | 112 | :b0 |
|
|
| R34 | boundary | administrative | 8 | 112 DE | :b1:E |
|
|
| R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W93 | highway | residential | :w2N |
|
|
And the places
|
|
| osm | class | type | addr+postcode | geometry |
|
|
| W22 | place | postcode | 445023 | :building:w2N |
|
|
When importing
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| W93 | W22 |
|
|
|
|
Scenario: postcode boundaries do appear in the address of a way
|
|
Given the scene admin-areas
|
|
And the named places
|
|
| osm | class | type | admin | addr+postcode | geometry |
|
|
| R1 | boundary | administrative | 6 | 112 | :b0 |
|
|
| R34 | boundary | administrative | 8 | 112 DE | :b1:E |
|
|
And the places
|
|
| osm | class | type | addr+postcode | geometry |
|
|
| R4 | boundary | postal_code | 112 DE 34 | :b2:N |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W93 | highway | residential | :w2N |
|
|
And the places
|
|
| osm | class | type | addr+postcode | geometry |
|
|
| W22 | place | postcode | 445023 | :building:w2N |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address |
|
|
| W93 | R4 |
|
|
|
|
Scenario: squares do not appear in the address of a street
|
|
Given the grid
|
|
| | 1 | | 2 | |
|
|
| 8 | | | | 9 |
|
|
| | 4 | | 3 | |
|
|
And the named places
|
|
| osm | class | type | geometry |
|
|
| W1 | highway | residential | 8, 9 |
|
|
| W2 | place | square | (1, 2, 3 ,4, 1) |
|
|
When importing
|
|
Then place_addressline doesn't contain
|
|
| object | address |
|
|
| W1 | W2 |
|
|
|
|
Scenario: addr:* tags are honored even when a street is far away from the place
|
|
Given the grid
|
|
| 1 | | 2 | | | 5 |
|
|
| | | | 8 | 9 | |
|
|
| 4 | | 3 | | | 6 |
|
|
And the places
|
|
| osm | class | type | admin | name | geometry |
|
|
| R1 | boundary | administrative | 8 | Left | (1,2,3,4,1) |
|
|
| R2 | boundary | administrative | 8 | Right | (2,3,6,5,2) |
|
|
And the places
|
|
| osm | class | type | addr+city | geometry |
|
|
| W1 | highway | primary | Left | 8,9 |
|
|
| W2 | highway | primary | Right | 8,9 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| W1 | R1 | True |
|
|
| W1 | R2 | False |
|
|
| W2 | R2 | True |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| W2 | R1 |
|
|
|
|
|
|
Scenario: addr:* tags are honored even when a POI is far away from the place
|
|
Given the grid
|
|
| 1 | | 2 | | | 5 |
|
|
| | | | 8 | 9 | |
|
|
| 4 | | 3 | | | 6 |
|
|
And the places
|
|
| osm | class | type | admin | name | geometry |
|
|
| R1 | boundary | administrative | 8 | Left | (1,2,3,4,1) |
|
|
| R2 | boundary | administrative | 8 | Right | (2,3,6,5,2) |
|
|
And the places
|
|
| osm | class | type | name | addr+city | geometry |
|
|
| W1 | highway | primary | Wonderway | Right | 8,9 |
|
|
| N1 | amenity | cafe | Bolder | Left | 9 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| W1 | R2 | True |
|
|
| N1 | R1 | True |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| W1 | R1 |
|
|
When searching for "Bolder"
|
|
Then results contain
|
|
| osm_type | osm_id | name |
|
|
| N | 1 | Bolder, Wonderway, Left |
|
|
|
|
Scenario: addr:* tags do not produce addresslines when the parent has the address part
|
|
Given the grid
|
|
| 1 | | | 5 |
|
|
| | 8 | 9 | |
|
|
| 4 | | | 6 |
|
|
And the places
|
|
| osm | class | type | admin | name | geometry |
|
|
| R1 | boundary | administrative | 8 | Outer | (1,5,6,4,1) |
|
|
And the places
|
|
| osm | class | type | name | addr+city | geometry |
|
|
| W1 | highway | primary | Wonderway | Outer | 8,9 |
|
|
| N1 | amenity | cafe | Bolder | Outer | 9 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| W1 | R1 | True |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| N1 | R1 |
|
|
When searching for "Bolder"
|
|
Then results contain
|
|
| osm_type | osm_id | name |
|
|
| N | 1 | Bolder, Wonderway, Outer |
|
|
|
|
Scenario: addr:* tags on outside do not produce addresslines when the parent has the address part
|
|
Given the grid
|
|
| 1 | | 2 | | | 5 |
|
|
| | | | 8 | 9 | |
|
|
| 4 | | 3 | | | 6 |
|
|
And the places
|
|
| osm | class | type | admin | name | geometry |
|
|
| R1 | boundary | administrative | 8 | Left | (1,2,3,4,1) |
|
|
| R2 | boundary | administrative | 8 | Right | (2,3,6,5,2) |
|
|
And the places
|
|
| osm | class | type | name | addr+city | geometry |
|
|
| W1 | highway | primary | Wonderway | Left | 8,9 |
|
|
| N1 | amenity | cafe | Bolder | Left | 9 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| W1 | R1 | True |
|
|
| W1 | R2 | False |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| N1 | R1 |
|
|
When searching for "Bolder"
|
|
Then results contain
|
|
| osm_type | osm_id | name |
|
|
| N | 1 | Bolder, Wonderway, Left |
|
|
|
|
Scenario: POIs can correct address parts on the fly
|
|
Given the grid
|
|
| 1 | | | | 2 | | 5 |
|
|
| | | | 9 | | 8 | |
|
|
| 4 | | | | 3 | | 6 |
|
|
And the places
|
|
| osm | class | type | admin | name | geometry |
|
|
| R1 | boundary | administrative | 8 | Left | (1,2,3,4,1) |
|
|
| R2 | boundary | administrative | 8 | Right | (2,3,6,5,2) |
|
|
And the places
|
|
| osm | class | type | name | geometry |
|
|
| W1 | highway | primary | Wonderway | 2,3 |
|
|
| N1 | amenity | cafe | Bolder | 9 |
|
|
| N2 | amenity | cafe | Leftside | 8 |
|
|
When importing
|
|
Then place_addressline contains
|
|
| object | address | isaddress |
|
|
| W1 | R1 | False |
|
|
| W1 | R2 | True |
|
|
And place_addressline doesn't contain
|
|
| object | address |
|
|
| N1 | R1 |
|
|
| N2 | R2 |
|
|
When searching for "Bolder"
|
|
Then results contain
|
|
| osm_type | osm_id | name |
|
|
| N | 1 | Bolder, Wonderway, Left |
|
|
When searching for "Leftside"
|
|
Then results contain
|
|
| osm_type | osm_id | name |
|
|
| N | 2 | Leftside, Wonderway, Right |
|