]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/bdd/db/import/addressing.feature
Merge pull request #3516 from lonvia/fixed-country-order
[nominatim.git] / test / bdd / db / import / addressing.feature
index 0421352139bd8c85adc86dc674a0e5382ecfcae5..e7c912074d88ae0ce5a2433035c79d51fdf5b3cb 100644 (file)
@@ -5,11 +5,11 @@ Feature: Address computation
     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 |
+        And the places
+            | osm | class | type     | name      | geometry |
+            | N1  | place | square   | Square    | 1 |
+            | N2  | place | hamlet   | West Farm | 2 |
+            | N3  | place | hamlet   | East Farm | 3 |
         When importing
         Then place_addressline contains
             | object | address | fromarea |
@@ -17,6 +17,10 @@ Feature: Address computation
         Then place_addressline doesn't contain
             | object | address |
             | N1     | N2      |
+        When sending search query "Square"
+        Then results contain
+           | osm | display_name      |
+           | N1  | Square, East Farm |
 
     Scenario: given two place nodes, the closer one wins for the address
         Given the grid
@@ -52,7 +56,7 @@ Feature: Address computation
             | N1     | R1      | True |
             | N1     | R2      | True |
 
-    Scenario: with boundaries of same rank the one with the closer centroid is prefered
+    Scenario: with boundaries of same rank the one with the closer centroid is preferred
         Given the grid
             | 1 |   |   | 3 |  | 5 |
             |   | 9 |   |   |  |   |
@@ -70,20 +74,22 @@ Feature: Address computation
 
     Scenario: boundary areas are preferred over place nodes in the address
         Given the grid
-            | 1 |   |   |   |   |   | 3 |
-            |   | 5 |   |   |   |   |   |
-            |   | 6 |   |   |   |   |   |
-            | 2 |   |   |   |   |   | 4 |
+            | 1 |   |   |   | 10 |   | 3 |
+            |   | 5 |   |   |    |   |   |
+            |   | 6 |   |   |    |   |   |
+            | 2 |   |   |   | 11 |   | 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) |
+            | osm | class    | type           | admin | geometry |
+            | N1  | place    | square         | 15    | 5 |
+            | N2  | place    | city           | 15    | 6 |
+            | R1  | place    | city           | 8     | (1,2,4,3,1) |
+            | R2  | boundary | administrative | 9     | (1,10,11,2,1) |
         When importing
         Then place_addressline contains
             | object | address | isaddress | cached_rank_address |
             | N1     | R1      | True      | 16                  |
-            | N1     | N2      | False     | 16                  |
+            | N1     | R2      | True      | 18                  |
+            | N1     | N2      | False     | 18                  |
 
     Scenario: place nodes outside a smaller ranked area are ignored
         Given the grid
@@ -247,38 +253,52 @@ Feature: Address computation
             | W1     | W10     |
 
     Scenario: buildings with only addr:postcodes do not appear in the address of a way
-        Given the scene admin-areas
+        Given the grid with origin DE
+            | 1 |   |   |   |   | 8 |   | 6 |   | 2 |
+            |   |10 |11 |   |   |   |   |   |   |   |
+            |   |13 |12 |   |   |   |   |   |   |   |
+            | 20|   |   | 21|   |   |   |   |   |   |
+            |   |   |   |   |   |   |   |   |   |   |
+            |   |   |   |   |   | 9 |   |   |   |   |
+            | 4 |   |   |   |   |   |   | 7 |   | 3 |
         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    |
+            | osm | class    | type           | admin | addr+postcode | geometry   |
+            | R1  | boundary | administrative | 6     | 10000         | (1,2,3,4,1)|
+            | R34 | boundary | administrative | 8     | 11200         | (1,6,7,4,1)|
+            | R4  | boundary | administrative | 10    | 11230         | (1,8,9,4,1)|
         And the named places
             | osm | class    | type           | geometry |
-            | W93 | highway  | residential    | :w2N     |
+            | W93 | highway  | residential    | 20,21    |
         And the places
             | osm | class    | type        | addr+postcode | geometry |
-            | W22 | place    | postcode    | 445023        | :building:w2N |
+            | W22 | place    | postcode    | 11234         | (10,11,12,13,10) |
         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
+       Given the grid with origin DE
+            | 1 |   |   |   |   | 8 |   | 6 |   | 2 |
+            |   |10 |11 |   |   |   |   |   |   |   |
+            |   |13 |12 |   |   |   |   |   |   |   |
+            | 20|   |   | 21|   |   |   |   |   |   |
+            |   |   |   |   |   |   |   |   |   |   |
+            |   |   |   |   |   | 9 |   |   |   |   |
+            | 4 |   |   |   |   |   |   | 7 |   | 3 |
         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    |
+            | osm | class    | type           | admin | addr+postcode | geometry    |
+            | R1  | boundary | administrative | 6     | 10000         | (1,2,3,4,1) |
+            | R34 | boundary | administrative | 8     | 11000         | (1,6,7,4,1) |
         And the places
             | osm | class    | type        | addr+postcode | geometry |
-            | R4  | boundary | postal_code | 112 DE 34     | :b2:N    |
+            | R4  | boundary | postal_code | 11200         | (1,8,9,4,1) |
         And the named places
             | osm | class    | type           | geometry |
-            | W93 | highway  | residential    | :w2N     |
+            | W93 | highway  | residential    | 20,21    |
         And the places
             | osm | class    | type        | addr+postcode | geometry |
-            | W22 | place    | postcode    | 445023        | :building:w2N |
+            | W22 | place    | postcode    | 11234         | (10,11,12,13,10) |
         When importing
         Then place_addressline contains
             | object | address |
@@ -331,10 +351,10 @@ Feature: Address computation
             | 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 named places
-            | osm | class   | type    | addr+city | geometry |
-            | W1  | highway | primary | Right     | 8,9      |
-            | N1  | amenity | cafe    | Left      | 9        |
+        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 |
@@ -343,4 +363,203 @@ Feature: Address computation
         And place_addressline doesn't contain
            | object | address |
            | W1     | R1      |
+        When sending search query "Bolder"
+        Then results contain
+           | osm | display_name            |
+           | N1  | 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 sending search query "Bolder"
+        Then results contain
+           | osm | display_name             |
+           | N1  | 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 sending search query "Bolder"
+        Then results contain
+           | osm | display_name            |
+           | N1  | 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 sending search query "Bolder"
+        Then results contain
+           | osm | display_name            |
+           | N1  | Bolder, Wonderway, Left |
+        When sending search query "Leftside"
+        Then results contain
+           | osm | display_name               |
+           | N2  | Leftside, Wonderway, Right |
+
+
+    Scenario: POIs can correct address parts on the fly (with partial unmatching address)
+        Given the grid
+            | 1 |   |   |   |  2 |   | 5 |
+            |   |   |   | 9 |    | 8 |   |
+            |   | 10| 11|   |    | 12|   |
+            | 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 | 10,11,12 |
+        And the places
+            | osm | class   | type    | name      | addr+suburb | geometry |
+            | N1  | amenity | cafe    | Bolder    | Boring      | 9        |
+            | N2  | amenity | cafe    | Leftside  | Boring      | 8        |
+        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      |
+           | N2     | R2      |
+        When sending search query "Bolder"
+        Then results contain
+           | osm | display_name            |
+           | N1  | Bolder, Wonderway, Left |
+        When sending search query "Leftside"
+        Then results contain
+           | osm | display_name               |
+           | N2  | Leftside, Wonderway, Right |
+
+
+
+    Scenario: POIs can correct address parts on the fly (with partial matching address)
+        Given the grid
+            | 1 |   |   |   |  2 |   | 5 |
+            |   |   |   | 9 |    | 8 |   |
+            |   | 10| 11|   |    | 12|   |
+            | 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 | 10,11,12 |
+        And the places
+            | osm | class   | type    | name      | addr+state | geometry |
+            | N1  | amenity | cafe    | Bolder    | Left       | 9        |
+            | N2  | amenity | cafe    | Leftside  | Left       | 8        |
+        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      |
+           | N2     | R2      |
+        When sending search query "Bolder"
+        Then results contain
+           | osm | display_name            |
+           | N1  | Bolder, Wonderway, Left |
+        When sending search query "Leftside"
+        Then results contain
+           | osm | display_name               |
+           | N2  | Leftside, Wonderway, Left |
+
+
+    Scenario: addr:* tags always match the closer area
+        Given the grid
+            | 1 |   |   |   |  2 |   | 5 |
+            |   |   |   |   |    |   |   |
+            |   | 10| 11|   |    |   |   |
+            | 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     | Left  | (2,3,6,5,2) |
+        And the places
+            | osm | class   | type    | name      | addr+city | geometry |
+            | W1  | highway | primary | Wonderway | Left      | 10,11    |
+        When importing
+        Then place_addressline doesn't contain
+            | object | address |
+            | W1     | R2      |
+
+    Scenario: Full name is prefered for unlisted addr:place tags
+        Given the grid
+            |   | 1 | 2 |   |
+            | 8 |   |   | 9 |
+        And the places
+            | osm | class | type | name    | geometry |
+            | W10 | place | city | Away    | (8,1,2,9,8) |
+        And the places
+            | osm | class   | type        | name          | addr+city | geometry |
+            | W1  | highway | residential | Royal Terrace | Gardens   | 8,9      |
+        And the places
+            | osm | class | type  | housenr | addr+place            | geometry | extra+foo |
+            | N1  | place | house | 1       | Royal Terrace Gardens | 1        | bar |
+        And the places
+            | osm | class | type  | housenr | addr+street   | geometry |
+            | N2  | place | house | 2       | Royal Terrace | 2        |
+        When importing
+        When sending search query "1, Royal Terrace Gardens"
+        Then results contain
+            | ID | osm |
+            | 0  | N1  |