]> 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         When sending geocodejson search query "3, foo" with address
380         Then results contain
381          | housenumber |
382          | 3           |
383
384     Scenario: POIs don't inherit from streets
385         Given the scene building-on-street-corner
386         And the named places
387          | osm | class   | type       | geometry |
388          | N1  | amenity | bank       | :n-inner |
389         And the places
390          | osm | class    | type | street | addr_place | housenr | geometry |
391          | W1  | highway  | path | foo    | nowhere    | 3       | :w-building |
392         And the places
393          | osm | class    | type        | name | geometry |
394          | W3  | highway  | residential | foo  | :w-NS |
395         When importing
396         Then placex contains
397          | object | parent_place_id | housenumber |
398          | N1     | W3              | None |
399
400     Scenario: POIs with own address do not inherit building address
401         Given the scene building-on-street-corner
402         And the named places
403          | osm | class   | type       | street | geometry |
404          | N1  | amenity | bank       | bar    | :n-inner |
405         And the named places
406          | osm | class   | type       | housenr | geometry |
407          | N2  | shop    | bakery     | 4       | :n-edge-NS |
408         And the named places
409          | osm | class   | type       | addr_place  | geometry |
410          | N3  | shop    | supermarket| nowhere     | :n-edge-WE |
411         And the places
412          | osm | class | type              | name     | geometry |
413          | N4  | place | isolated_dwelling | theplace | :n-outer |
414         And the places
415          | osm | class    | type | addr_place | housenr | geometry |
416          | W1  | building | yes  | theplace   | 3       | :w-building |
417         And the places
418          | osm | class    | type        | name | geometry |
419          | W2  | highway  | primary     | bar  | :w-WE |
420          | W3  | highway  | residential | foo  | :w-NS |
421         When importing
422         Then placex contains
423          | object | parent_place_id | housenumber |
424          | W1     | N4              | 3 |
425          | N1     | W2              | None |
426          | N2     | W3              | 4 |
427          | N3     | N4              | None |
428
429     Scenario: POIs parent a road if they are attached to it
430         Given the scene points-on-roads
431         And the named places
432          | osm | class   | type     | street   | geometry |
433          | N1  | highway | bus_stop | North St | :n-SE |
434          | N2  | highway | bus_stop | South St | :n-NW |
435          | N3  | highway | bus_stop | North St | :n-S-unglued |
436          | N4  | highway | bus_stop | South St | :n-N-unglued |
437         And the places
438          | osm | class   | type         | name     | geometry |
439          | W1  | highway | secondary    | North St | :w-north |
440          | W2  | highway | unclassified | South St | :w-south |
441         And the ways
442          | id | nodes |
443          | 1  | 100,101,2,103,104 |
444          | 2  | 200,201,1,202,203 |
445         When importing
446         Then placex contains
447          | object | parent_place_id |
448          | N1     | W1 |
449          | N2     | W2 |
450          | N3     | W1 |
451          | N4     | W2 |
452
453     Scenario: POIs do not parent non-roads they are attached to
454         Given the scene points-on-roads
455         And the named places
456          | osm | class   | type     | street   | geometry |
457          | N1  | highway | bus_stop | North St | :n-SE |
458          | N2  | highway | bus_stop | South St | :n-NW |
459         And the places
460          | osm | class   | type         | name     | geometry |
461          | W1  | landuse | residential  | North St | :w-north |
462          | W2  | waterway| river        | South St | :w-south |
463         And the ways
464          | id | nodes |
465          | 1  | 100,101,2,103,104 |
466          | 2  | 200,201,1,202,203 |
467         When importing
468         Then placex contains
469          | object | parent_place_id |
470          | N1     | 0 |
471          | N2     | 0 |
472
473     Scenario: POIs on building outlines inherit associated street relation
474         Given the scene building-on-street-corner
475         And the named places
476          | osm | class    | type  | geometry |
477          | N1  | place    | house | :n-edge-NS |
478          | W1  | building | yes   | :w-building |
479         And the places
480          | osm | class    | type        | name | geometry |
481          | W2  | highway  | primary     | bar  | :w-WE |
482          | W3  | highway  | residential | foo  | :w-NS |
483         And the relations
484          | id | members            | tags+type |
485          | 1  | W1:house,W2:street | associatedStreet |
486         And the ways
487          | id | nodes |
488          | 1  | 100,1,101,102,100 |
489         When importing
490         Then placex contains
491          | object | parent_place_id |
492          | N1     | W2 |
493
494     # github #1056
495     Scenario: Full names should be preferably matched for nearest road
496         Given the grid
497             | 1 |   | 2 | 5 |
498             |   |   |   |   |
499             | 3 |   |   | 4 |
500             |   | 10|   |   |
501         And the places
502             | osm | class   | type    | name+name               | geometry |
503             | W1  | highway | residential | Via Cavassico superiore | 1, 2 |
504             | W3  | highway | residential | Via Cavassico superiore | 2, 5 |
505             | W2  | highway | primary | Via Frazione Cavassico  | 3, 4     |
506         And the named places
507             | osm | class   | type    | addr+street             |
508             | N10 | shop    | yes     | Via Cavassico superiore |
509         When importing
510         Then placex contains
511           | object | parent_place_id |
512           | N10    | W1 |
513
514      Scenario: place=square may be parented via addr:place
515         Given the grid
516             |   |   | 9 |   |   |
517             |   | 5 |   | 6 |   |
518             |   | 8 |   | 7 |   |
519         And the places
520             | osm | class    | type    | name+name | geometry        |
521             | W2  | place    | square  | Foo pl    | (5, 6, 7, 8, 5) |
522         And the places
523             | osm | class    | type    | name+name | housenr | addr_place | geometry |
524             | N10 | shop     | grocery | le shop   | 5       | Foo pl     | 9        |
525         When importing
526         Then placex contains
527             | object | rank_address |
528             | W2     | 25           |
529         Then placex contains
530             | object | parent_place_id |
531             | N10    | W2              |
532