]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/import/linking.feature
Merge pull request #2087 from lonvia/only-one-link-per-node
[nominatim.git] / test / bdd / db / import / linking.feature
1 @DB
2 Feature: Linking of places
3     Tests for correctly determining linked places
4
5     Scenario: Only address-describing places can be linked
6         Given the scene way-area-with-center
7         And the places
8          | osm  | class   | type   | name  | geometry |
9          | R13  | landuse | forest | Garbo | :area |
10          | N256 | natural | peak   | Garbo | :inner-C |
11         When importing
12         Then placex contains
13          | object  | linked_place_id |
14          | R13     | - |
15          | N256    | - |
16
17     Scenario: Postcode areas cannot be linked
18         Given the grid
19          | 1 |   | 2 |
20          |   | 9 |   |
21          | 4 |   | 3 |
22         And the named places
23          | osm | class    | type        | addr+postcode  | extra+wikidata | geometry    |
24          | R13 | boundary | postal_code | 123            | Q87493         | (1,2,3,4,1) |
25          | N25 | place    | suburb      | 123            | Q87493         | 9 |
26         When importing
27         Then placex contains
28          | object | linked_place_id |
29          | R13    | - |
30          | N25    | - |
31
32      Scenario: Waterways are linked when in waterway relations
33         Given the scene split-road
34         And the places
35          | osm | class    | type  | name  | geometry |
36          | W1  | waterway | river | Rhein | :w-2 |
37          | W2  | waterway | river | Rhein | :w-3 |
38          | R13 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
39          | R23 | waterway | river | Limmat| :w-4a |
40         And the relations
41          | id | members                          | tags+type |
42          | 13 | R23:tributary,W1,W2:main_stream  | waterway |
43         When importing
44         Then placex contains
45          | object | linked_place_id |
46          | W1     | R13 |
47          | W2     | R13 |
48          | R13    | -   |
49          | R23    | -   |
50         When searching for "rhein"
51         Then results contain
52          | osm_type |
53          | R |
54
55     Scenario: Relations are not linked when in waterway relations
56         Given the scene split-road
57         And the places
58          | osm | class    | type   | name  | geometry |
59          | W1  | waterway | stream | Rhein | :w-2 |
60          | W2  | waterway | river  | Rhein | :w-3 |
61          | R1  | waterway | river  | Rhein | :w-1 + :w-2 + :w-3 |
62          | R2  | waterway | river  | Limmat| :w-4a |
63         And the relations
64          | id | members                          | tags+type |
65          | 1  | R2                               | waterway  |
66         When importing
67         Then placex contains
68          | object | linked_place_id |
69          | W1     | - |
70          | W2     | - |
71          | R1     | - |
72          | R2     | - |
73
74     Scenario: Empty waterway relations are handled correctly
75         Given the scene split-road
76         And the places
77          | osm | class    | type  | name  | geometry |
78          | R1  | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
79         And the relations
80          | id | members  | tags+type |
81          | 1  |          | waterway |
82         When importing
83         Then placex contains
84          | object | linked_place_id |
85          | R1     | - |
86
87     Scenario: Waterways are not linked when the way type is not a river feature
88         Given the scene split-road
89         And the places
90          | osm | class    | type     | name  | geometry |
91          | W1  | waterway | lock     | Rhein | :w-2 |
92          | R1  | waterway | river    | Rhein | :w-1 + :w-2 + :w-3 |
93         And the relations
94          | id | members               | tags+type |
95          | 1  | N23,N34,W1,R45        | multipolygon |
96         When importing
97         Then placex contains
98          | object | linked_place_id |
99          | W1     | - |
100          | R1     | - |
101         When searching for "rhein"
102         Then results contain
103           | ID | osm_type |
104           |  0 | R |
105           |  1 | W |
106
107     Scenario: Side streams are linked only when they have the same name
108         Given the scene split-road
109         And the places
110          | osm | class    | type  | name   | geometry |
111          | W1  | waterway | river | Rhein2 | :w-2 |
112          | W2  | waterway | river | Rhein  | :w-3 |
113          | R1  | waterway | river | Rhein  | :w-1 + :w-2 + :w-3 |
114         And the relations
115          | id | members                           | tags+type |
116          | 1  | W1:side_stream,W2:side_stream     | waterway |
117         When importing
118         Then placex contains
119          | object | linked_place_id |
120          | W1     | -  |
121          | W2     | R1 |
122         When searching for "rhein2"
123         Then results contain
124          | osm_type |
125          | W |
126
127     # github #573
128     Scenario: Boundaries should only be linked to places
129         Given the named places
130          | osm | class    | type           | extra+wikidata | admin | geometry |
131          | R1  | boundary | administrative | 34             | 8     | poly-area:0.1 |
132         And the named places
133          | osm | class    | type           | geometry |
134          | N3  | natural  | island         | 0.00001 0 |
135          | N3  | place    | city           | 0.00001 0 |
136         And the relations
137          | id | members  |
138          | 1  | N3:label |
139         When importing
140         Then placex contains
141          | object     | linked_place_id |
142          | N3:natural | -               |
143          | N3:place   | R1              |
144
145     Scenario: Nodes with 'role' label are always linked
146         Given the places
147          | osm  | class    | type           | admin | name  | geometry |
148          | R13  | boundary | administrative | 6     | Garbo | poly-area:0.1 |
149          | N2   | place    | hamlet         | 15    | Vario | 0.006 0.00001 |
150         And the relations
151          | id | members       | tags+type |
152          | 13 | N2:label      | boundary |
153         When importing
154         Then placex contains
155          | object  | linked_place_id |
156          | N2      | R13 |
157         And placex contains
158          | object | centroid      | name+name | extratags+linked_place |
159          | R13    | 0.006 0.00001 | Garbo     | hamlet |
160
161     Scenario: Boundaries with place tags are linked against places with same type
162         Given the places
163          | osm  | class    | type           | admin | name   | extra+place | geometry |
164          | R13  | boundary | administrative | 4     | Berlin | city        |poly-area:0.1 |
165         And the places
166          | osm  | class    | type           | name   | geometry |
167          | N2   | place    | city           | Berlin | 0.006 0.00001 |
168         When importing
169         Then placex contains
170          | object  | linked_place_id |
171          | N2      | R13             |
172         And placex contains
173          | object | rank_address |
174          | R13    | 16 |
175         When searching for ""
176          | city |
177          | Berlin |
178         Then results contain
179           | ID | osm_type | osm_id |
180           |  0 | R | 13 |
181         When searching for ""
182          | state |
183          | Berlin |
184         Then results contain
185           | ID | osm_type | osm_id |
186           |  0 | R | 13 |
187
188
189     Scenario: Boundaries without place tags only link against same admin level
190         Given the places
191          | osm  | class    | type           | admin | name   | geometry |
192          | R13  | boundary | administrative | 4     | Berlin |poly-area:0.1 |
193         And the places
194          | osm  | class    | type           | name   | geometry |
195          | N2   | place    | city           | Berlin | 0.006 0.00001 |
196         When importing
197         Then placex contains
198          | object  | linked_place_id |
199          | N2      | -               |
200         And placex contains
201          | object | rank_address |
202          | R13    | 8 |
203         When searching for ""
204          | state |
205          | Berlin |
206         Then results contain
207           | ID | osm_type | osm_id |
208           |  0 | R | 13 |
209         When searching for ""
210          | city |
211          | Berlin |
212         Then results contain
213           | ID | osm_type | osm_id |
214           |  0 | N | 2 |
215
216     # github #1352
217     Scenario: Do not use linked centroid when it is outside the area
218         Given the named places
219          | osm  | class    | type           | admin | geometry |
220          | R13  | boundary | administrative | 4     | poly-area:0.01 |
221         And the named places
222          | osm  | class    | type           | geometry |
223          | N2   | place    | city           | 0.1 0.1 |
224         And the relations
225          | id | members       | tags+type |
226          | 13 | N2:label      | boundary |
227         When importing
228         Then placex contains
229          | object | linked_place_id |
230          | N2     | R13             |
231         And placex contains
232          | object | centroid |
233          | R13    | in geometry  |
234
235     Scenario: Place nodes can only be linked once
236         Given the named places
237          | osm  | class    | type | extra+wikidata | geometry |
238          | N2   | place    | city | Q1234          | 0 0 |
239         And the named places
240          | osm  | class    | type           | extra+wikidata | admin | geometry |
241          | R1   | boundary | administrative | Q1234          | 8     | poly-area:0.1 |
242          | R2   | boundary | administrative | Q1234          | 9     | poly-area:0.01 |
243         When importing
244         Then placex contains
245          | object | linked_place_id |
246          | N2     | R1              |
247         And placex contains
248          | object | extratags                |
249          | R1     | 'linked_place' : 'city', 'wikidata': 'Q1234'  |
250          | R2     | 'wikidata': 'Q1234'                     |
251