]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/import/parenting.feature
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / test / bdd / db / import / parenting.feature
1 @DB
2 Feature: Parenting of objects
3     Tests that the correct parent is chosen
4
5     Scenario: Address inherits postcode from its street unless it has a postcode
6         Given the scene roads-with-pois
7         And the places
8          | osm | class | type  | housenr | geometry |
9          | N1  | place | house | 4       | :p-N1 |
10         And the places
11          | osm | class | type  | housenr | postcode | geometry |
12          | N2  | place | house | 5       | 99999    | :p-N1 |
13         And the places
14          | osm | class   | type        | name  | postcode | geometry |
15          | W1  | highway | residential | galoo | 12345    | :w-north |
16         When importing
17         Then placex contains
18          | object | parent_place_id |
19          | N1     | W1 |
20          | N2     | W1 |
21         When sending search query "4 galoo"
22         Then results contain
23          | ID | osm_type | osm_id | display_name |
24          | 0  | N        | 1      | 4, galoo, 12345 |
25         When sending search query "5 galoo"
26         Then results contain
27          | ID | osm_type | osm_id | display_name |
28          | 0  | N        | 2      | 5, galoo, 99999 |
29
30     Scenario: Address without tags, closest street
31         Given the scene roads-with-pois
32         And the places
33          | osm | class | type  | geometry |
34          | N1  | place | house | :p-N1 |
35          | N2  | place | house | :p-N2 |
36          | N3  | place | house | :p-S1 |
37          | N4  | place | house | :p-S2 |
38         And the named places
39          | osm | class   | type        | geometry |
40          | W1  | highway | residential | :w-north |
41          | W2  | highway | residential | :w-south |
42         When importing
43         Then placex contains
44          | object | parent_place_id |
45          | N1     | W1 |
46          | N2     | W1 |
47          | N3     | W2 |
48          | N4     | W2 |
49
50     Scenario: Address without tags avoids unnamed streets
51         Given the scene roads-with-pois
52         And the places
53          | osm | class   | type  | geometry |
54          | N1  | place   | house | :p-N1 |
55          | N2  | place   | house | :p-N2 |
56          | N3  | place   | house | :p-S1 |
57          | N4  | place   | house | :p-S2 |
58          | W1  | highway | residential | :w-north |
59         And the named places
60          | osm | class   | type        | geometry |
61          | W2  | highway | residential | :w-south |
62         When importing
63         Then placex contains
64          | object | parent_place_id |
65          | N1     | W2 |
66          | N2     | W2 |
67          | N3     | W2 |
68          | N4     | W2 |
69
70     Scenario: addr:street tag parents to appropriately named street
71         Given the scene roads-with-pois
72         And the places
73          | osm | class | type  | street| geometry |
74          | N1  | place | house | south | :p-N1 |
75          | N2  | place | house | north | :p-N2 |
76          | N3  | place | house | south | :p-S1 |
77          | N4  | place | house | north | :p-S2 |
78         And the places
79          | osm | class   | type        | name  | geometry |
80          | W1  | highway | residential | north | :w-north |
81          | W2  | highway | residential | south | :w-south |
82         When importing
83         Then placex contains
84          | object | parent_place_id |
85          | N1     | W2 |
86          | N2     | W1 |
87          | N3     | W2 |
88          | N4     | W1 |
89
90     @fail-legacy
91     Scenario: addr:street tag parents to appropriately named street, locale names
92         Given the scene roads-with-pois
93         And the places
94          | osm | class | type  | street| addr+street:de | geometry |
95          | N1  | place | house | south | Süd               | :p-N1 |
96          | N2  | place | house | north | Nord              | :p-N2 |
97          | N3  | place | house | south | Süd               | :p-S1 |
98          | N4  | place | house | north | Nord              | :p-S2 |
99         And the places
100          | osm | class   | type        | name  | geometry |
101          | W1  | highway | residential | Nord | :w-north |
102          | W2  | highway | residential | Süd | :w-south |
103         And the places
104          | osm | class | type   | name  | name+name:old |
105          | N5  | place | hamlet | south | north         |
106         When importing
107         Then placex contains
108          | object | parent_place_id |
109          | N1     | W2 |
110          | N2     | W1 |
111          | N3     | W2 |
112          | N4     | W1 |
113
114     Scenario: addr:street tag parents to appropriately named street with abbreviation
115         Given the scene roads-with-pois
116         And the places
117          | osm | class | type  | street| geometry |
118          | N1  | place | house | south st | :p-N1 |
119          | N2  | place | house | north st | :p-N2 |
120          | N3  | place | house | south st | :p-S1 |
121          | N4  | place | house | north st | :p-S2 |
122         And the places
123          | osm | class   | type        | name+name:en  | geometry |
124          | W1  | highway | residential | north street | :w-north |
125          | W2  | highway | residential | south street | :w-south |
126         When importing
127         Then placex contains
128          | object | parent_place_id |
129          | N1     | W2 |
130          | N2     | W1 |
131          | N3     | W2 |
132          | N4     | W1 |
133
134
135
136     Scenario: addr:street tag parents to next named street
137         Given the scene roads-with-pois
138         And the places
139          | osm | class | type  | street | geometry |
140          | N1  | place | house | abcdef | :p-N1 |
141          | N2  | place | house | abcdef | :p-N2 |
142          | N3  | place | house | abcdef | :p-S1 |
143          | N4  | place | house | abcdef | :p-S2 |
144         And the places
145          | osm | class   | type        | name   | geometry |
146          | W1  | highway | residential | abcdef | :w-north |
147          | W2  | highway | residential | abcdef | :w-south |
148         When importing
149         Then placex contains
150          | object | parent_place_id |
151          | N1     | W1 |
152          | N2     | W1 |
153          | N3     | W2 |
154          | N4     | W2 |
155
156     Scenario: addr:street tag without appropriately named street
157         Given the scene roads-with-pois
158         And the places
159          | osm | class | type  | street | geometry |
160          | N1  | place | house | abcdef | :p-N1 |
161          | N2  | place | house | abcdef | :p-N2 |
162          | N3  | place | house | abcdef | :p-S1 |
163          | N4  | place | house | abcdef | :p-S2 |
164         And the places
165          | osm | class   | type        | name  | geometry |
166          | W1  | highway | residential | abcde | :w-north |
167          | W2  | highway | residential | abcde | :w-south |
168         When importing
169         Then placex contains
170          | object | parent_place_id |
171          | N1     | W1 |
172          | N2     | W1 |
173          | N3     | W2 |
174          | N4     | W2 |
175
176     Scenario: addr:place address
177         Given the scene road-with-alley
178         And the places
179          | osm | class | type   | addr_place | geometry |
180          | N1  | place | house  | myhamlet   | :n-alley |
181         And the places
182          | osm | class   | type        | name     | geometry |
183          | N2  | place   | hamlet      | myhamlet | :n-main-west |
184          | W1  | highway | residential | myhamlet | :w-main |
185         When importing
186         Then placex contains
187          | object | parent_place_id |
188          | N1     | N2 |
189
190     Scenario: addr:street is preferred over addr:place
191         Given the scene road-with-alley
192         And the places
193          | osm | class | type   | addr_place | street  | geometry |
194          | N1  | place | house  | myhamlet   | mystreet| :n-alley |
195         And the places
196          | osm | class   | type        | name     | geometry |
197          | N2  | place   | hamlet      | myhamlet | :n-main-west |
198          | W1  | highway | residential | mystreet | :w-main |
199         When importing
200         Then placex contains
201          | object | parent_place_id |
202          | N1     | W1 |
203
204     Scenario: Untagged address in simple associated street relation
205         Given the scene road-with-alley
206         And the places
207          | osm | class | type  | geometry |
208          | N1  | place | house | :n-alley |
209          | N2  | place | house | :n-corner |
210          | N3  | place | house | :n-main-west |
211         And the places
212          | osm | class   | type        | name | geometry |
213          | W1  | highway | residential | foo  | :w-main |
214          | W2  | highway | service     | bar  | :w-alley |
215         And the relations
216          | id | members            | tags+type |
217          | 1  | W1:street,N1,N2,N3 | associatedStreet |
218         When importing
219         Then placex contains
220          | object | parent_place_id |
221          | N1     | W1 |
222          | N2     | W1 |
223          | N3     | W1 |
224
225     Scenario: Avoid unnamed streets in simple associated street relation
226         Given the scene road-with-alley
227         And the places
228          | osm | class | type  | geometry |
229          | N1  | place | house | :n-alley |
230          | N2  | place | house | :n-corner |
231          | N3  | place | house | :n-main-west |
232          | W2  | highway | residential | :w-alley |
233         And the named places
234          | osm | class   | type        | geometry |
235          | W1  | highway | residential | :w-main |
236         And the relations
237          | id | members                      | tags+type |
238          | 1  | N1,N2,N3,W2:street,W1:street | associatedStreet |
239         When importing
240         Then placex contains
241          | object | parent_place_id |
242          | N1     | W1 |
243          | N2     | W1 |
244          | N3     | W1 |
245
246     Scenario: Associated street relation overrides addr:street
247         Given the scene road-with-alley
248         And the places
249          | osm | class | type  | street | geometry |
250          | N1  | place | house | bar    | :n-alley |
251         And the places
252          | osm | class   | type        | name | geometry |
253          | W1  | highway | residential | foo  | :w-main |
254          | W2  | highway | residential | bar  | :w-alley |
255         And the relations
256          | id | members            | tags+type |
257          | 1  | W1:street,N1,N2,N3 | associatedStreet |
258         When importing
259         Then placex contains
260          | object | parent_place_id |
261          | N1     | W1 |
262
263     Scenario: Building without tags, closest street from center point
264         Given the scene building-on-street-corner
265         And the named places
266          | osm | class    | type        | geometry |
267          | W1  | building | yes         | :w-building |
268          | W2  | highway  | primary     | :w-WE |
269          | W3  | highway  | residential | :w-NS |
270         When importing
271         Then placex contains
272          | object | parent_place_id |
273          | W1     | W2 |
274
275     Scenario: Building with addr:street tags
276         Given the scene building-on-street-corner
277         And the named places
278          | osm | class    | type | street | geometry |
279          | W1  | building | yes  | bar    | :w-building |
280         And the places
281          | osm | class    | type        | name | geometry |
282          | W2  | highway  | primary     | bar  | :w-WE |
283          | W3  | highway  | residential | foo  | :w-NS |
284         When importing
285         Then placex contains
286          | object | parent_place_id |
287          | W1     | W2 |
288
289     Scenario: Building with addr:place tags
290         Given the scene building-on-street-corner
291         And the places
292          | osm | class    | type        | name | geometry |
293          | N1  | place    | village     | bar  | :n-outer |
294          | W2  | highway  | primary     | bar  | :w-WE |
295          | W3  | highway  | residential | foo  | :w-NS |
296         And the named places
297          | osm | class    | type | addr_place | geometry |
298          | W1  | building | yes  | bar        | :w-building |
299         When importing
300         Then placex contains
301          | object | parent_place_id |
302          | W1     | N1 |
303
304     Scenario: Building in associated street relation
305         Given the scene building-on-street-corner
306         And the named places
307          | osm | class    | type | geometry |
308          | W1  | building | yes  | :w-building |
309         And the places
310          | osm | class    | type        | name | geometry |
311          | W2  | highway  | primary     | bar  | :w-WE |
312          | W3  | highway  | residential | foo  | :w-NS |
313         And the relations
314          | id | members            | tags+type |
315          | 1  | W1:house,W2:street | associatedStreet |
316         When importing
317         Then placex contains
318          | object | parent_place_id |
319          | W1     | W2 |
320
321     Scenario: Building in associated street relation overrides addr:street
322         Given the scene building-on-street-corner
323         And the named places
324          | osm | class    | type | street | geometry |
325          | W1  | building | yes  | foo    | :w-building |
326         And the places
327          | osm | class    | type        | name | geometry |
328          | W2  | highway  | primary     | bar  | :w-WE |
329          | W3  | highway  | residential | foo  | :w-NS |
330         And the relations
331          | id | members            | tags+type |
332          | 1  | W1:house,W2:street | associatedStreet |
333         When importing
334         Then placex contains
335          | object | parent_place_id |
336          | W1     | W2 |
337
338     Scenario: Wrong member in associated street relation is ignored
339         Given the scene building-on-street-corner
340         And the named places
341          | osm | class | type  | geometry |
342          | N1  | place | house | :n-outer |
343         And the named places
344          | osm | class    | type | street | geometry |
345          | W1  | building | yes  | foo    | :w-building |
346         And the places
347          | osm | class    | type        | name | geometry |
348          | W2  | highway  | primary     | bar  | :w-WE |
349          | W3  | highway  | residential | foo  | :w-NS |
350         And the relations
351          | id | members                      | tags+type |
352          | 1  | N1:house,W1:street,W3:street | associatedStreet |
353         When importing
354         Then placex contains
355          | object | parent_place_id |
356          | N1     | W3 |
357
358     Scenario: POIs in building inherit address
359         Given the scene building-on-street-corner
360         And the named places
361          | osm | class   | type       | geometry |
362          | N1  | amenity | bank       | :n-inner |
363          | N2  | shop    | bakery     | :n-edge-NS |
364          | N3  | shop    | supermarket| :n-edge-WE |
365         And the places
366          | osm | class    | type | street | addr_place | housenr | geometry |
367          | W1  | building | yes  | foo    | nowhere    | 3       | :w-building |
368         And the places
369          | osm | class    | type        | name | geometry |
370          | W2  | highway  | primary     | bar  | :w-WE |
371          | W3  | highway  | residential | foo  | :w-NS |
372         When importing
373         Then placex contains
374          | object | parent_place_id | housenumber |
375          | W1     | W3              | 3 |
376          | N1     | W3              | 3 |
377          | N2     | W3              | 3 |
378          | N3     | W3              | 3 |
379
380     Scenario: POIs don't inherit from streets
381         Given the scene building-on-street-corner
382         And the named places
383          | osm | class   | type       | geometry |
384          | N1  | amenity | bank       | :n-inner |
385         And the places
386          | osm | class    | type | street | addr_place | housenr | geometry |
387          | W1  | highway  | path | foo    | nowhere    | 3       | :w-building |
388         And the places
389          | osm | class    | type        | name | geometry |
390          | W3  | highway  | residential | foo  | :w-NS |
391         When importing
392         Then placex contains
393          | object | parent_place_id | housenumber |
394          | N1     | W3              | None |
395
396     Scenario: POIs with own address do not inherit building address
397         Given the scene building-on-street-corner
398         And the named places
399          | osm | class   | type       | street | geometry |
400          | N1  | amenity | bank       | bar    | :n-inner |
401         And the named places
402          | osm | class   | type       | housenr | geometry |
403          | N2  | shop    | bakery     | 4       | :n-edge-NS |
404         And the named places
405          | osm | class   | type       | addr_place  | geometry |
406          | N3  | shop    | supermarket| nowhere     | :n-edge-WE |
407         And the places
408          | osm | class | type              | name     | geometry |
409          | N4  | place | isolated_dwelling | theplace | :n-outer |
410         And the places
411          | osm | class    | type | addr_place | housenr | geometry |
412          | W1  | building | yes  | theplace   | 3       | :w-building |
413         And the places
414          | osm | class    | type        | name | geometry |
415          | W2  | highway  | primary     | bar  | :w-WE |
416          | W3  | highway  | residential | foo  | :w-NS |
417         When importing
418         Then placex contains
419          | object | parent_place_id | housenumber |
420          | W1     | N4              | 3 |
421          | N1     | W2              | None |
422          | N2     | W3              | 4 |
423          | N3     | N4              | None |
424
425     Scenario: POIs parent a road if they are attached to it
426         Given the scene points-on-roads
427         And the named places
428          | osm | class   | type     | street   | geometry |
429          | N1  | highway | bus_stop | North St | :n-SE |
430          | N2  | highway | bus_stop | South St | :n-NW |
431          | N3  | highway | bus_stop | North St | :n-S-unglued |
432          | N4  | highway | bus_stop | South St | :n-N-unglued |
433         And the places
434          | osm | class   | type         | name     | geometry |
435          | W1  | highway | secondary    | North St | :w-north |
436          | W2  | highway | unclassified | South St | :w-south |
437         And the ways
438          | id | nodes |
439          | 1  | 100,101,2,103,104 |
440          | 2  | 200,201,1,202,203 |
441         When importing
442         Then placex contains
443          | object | parent_place_id |
444          | N1     | W1 |
445          | N2     | W2 |
446          | N3     | W1 |
447          | N4     | W2 |
448
449     Scenario: POIs do not parent non-roads they are attached to
450         Given the scene points-on-roads
451         And the named places
452          | osm | class   | type     | street   | geometry |
453          | N1  | highway | bus_stop | North St | :n-SE |
454          | N2  | highway | bus_stop | South St | :n-NW |
455         And the places
456          | osm | class   | type         | name     | geometry |
457          | W1  | landuse | residential  | North St | :w-north |
458          | W2  | waterway| river        | South St | :w-south |
459         And the ways
460          | id | nodes |
461          | 1  | 100,101,2,103,104 |
462          | 2  | 200,201,1,202,203 |
463         When importing
464         Then placex contains
465          | object | parent_place_id |
466          | N1     | 0 |
467          | N2     | 0 |
468
469     Scenario: POIs on building outlines inherit associated street relation
470         Given the scene building-on-street-corner
471         And the named places
472          | osm | class    | type  | geometry |
473          | N1  | place    | house | :n-edge-NS |
474          | W1  | building | yes   | :w-building |
475         And the places
476          | osm | class    | type        | name | geometry |
477          | W2  | highway  | primary     | bar  | :w-WE |
478          | W3  | highway  | residential | foo  | :w-NS |
479         And the relations
480          | id | members            | tags+type |
481          | 1  | W1:house,W2:street | associatedStreet |
482         And the ways
483          | id | nodes |
484          | 1  | 100,1,101,102,100 |
485         When importing
486         Then placex contains
487          | object | parent_place_id |
488          | N1     | W2 |
489
490     # github #1056
491     Scenario: Full names should be preferably matched for nearest road
492         Given the grid
493             | 1 |   | 2 | 5 |
494             |   |   |   |   |
495             | 3 |   |   | 4 |
496             |   | 10|   |   |
497         And the places
498             | osm | class   | type    | name+name               | geometry |
499             | W1  | highway | residential | Via Cavassico superiore | 1, 2 |
500             | W3  | highway | residential | Via Cavassico superiore | 2, 5 |
501             | W2  | highway | primary | Via Frazione Cavassico  | 3, 4     |
502         And the named places
503             | osm | class   | type    | addr+street             |
504             | N10 | shop    | yes     | Via Cavassico superiore |
505         When importing
506         Then placex contains
507           | object | parent_place_id |
508           | N10    | W1 |
509
510      Scenario: place=square may be parented via addr:place
511         Given the grid
512             |   |   | 9 |   |   |
513             |   | 5 |   | 6 |   |
514             |   | 8 |   | 7 |   |
515         And the places
516             | osm | class    | type    | name+name | geometry        |
517             | W2  | place    | square  | Foo pl    | (5, 6, 7, 8, 5) |
518         And the places
519             | osm | class    | type    | name+name | housenr | addr_place | geometry |
520             | N10 | shop     | grocery | le shop   | 5       | Foo pl     | 9        |
521         When importing
522         Then placex contains
523             | object | rank_address |
524             | W2     | 25           |
525         Then placex contains
526             | object | parent_place_id |
527             | N10    | W2              |
528