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