]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/import/parenting.feature
release 4.5.0.post7
[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 grid with origin DE
7          | 10 |   |   |   |   | 11 |
8          |    |   |   |   |   |    |
9          |    | 1 |   | 2 |   |    |
10         And the places
11          | osm | class | type  | housenr |
12          | N1  | place | house | 4       |
13         And the places
14          | osm | class | type  | housenr | postcode |
15          | N2  | place | house | 5       | 99999    |
16         And the places
17          | osm | class   | type        | name  | postcode | geometry |
18          | W1  | highway | residential | galoo | 12345    | 10,11    |
19         When importing
20         Then placex contains
21          | object | parent_place_id |
22          | N1     | W1 |
23          | N2     | W1 |
24         When sending search query "4 galoo"
25         Then results contain
26          | ID | osm | display_name |
27          | 0  | N1  | 4, galoo, 12345, Deutschland |
28         When sending search query "5 galoo"
29         Then results contain
30          | ID | osm | display_name |
31          | 0  | N2  | 5, galoo, 99999, Deutschland |
32
33     Scenario: Address without tags, closest street
34         Given the grid
35          | 10 |   |   |   |   | 11 |
36          |    | 1 | 2 |   |   |    |
37          |    |   |   | 3 | 4 |    |
38          | 20 |   |   |   |   | 21 |
39         And the places
40          | osm | class | type  |
41          | N1  | place | house |
42          | N2  | place | house |
43          | N3  | place | house |
44          | N4  | place | house |
45         And the named places
46          | osm | class   | type        | geometry |
47          | W1  | highway | residential | 10,11    |
48          | W2  | highway | residential | 20,21    |
49         When importing
50         Then placex contains
51          | object | parent_place_id |
52          | N1     | W1 |
53          | N2     | W1 |
54          | N3     | W2 |
55          | N4     | W2 |
56
57     Scenario: Address without tags avoids unnamed streets
58         Given the grid
59          | 10 |   |   |   |   | 11 |
60          |    | 1 | 2 |   |   |    |
61          |    |   |   | 3 | 4 |    |
62          | 20 |   |   |   |   | 21 |
63         And the places
64          | osm | class   | type  |
65          | N1  | place   | house |
66          | N2  | place   | house |
67          | N3  | place   | house |
68          | N4  | place   | house |
69         And the places
70          | osm | class   | type        | geometry |
71          | W1  | highway | residential | 10,11    |
72         And the named places
73          | osm | class   | type        | geometry |
74          | W2  | highway | residential | 20,21 |
75         When importing
76         Then placex contains
77          | object | parent_place_id |
78          | N1     | W2 |
79          | N2     | W2 |
80          | N3     | W2 |
81          | N4     | W2 |
82
83     Scenario: addr:street tag parents to appropriately named street
84         Given the grid
85          | 10 |   |   |   |   | 11 |
86          |    | 1 | 2 |   |   |    |
87          |    |   |   | 3 | 4 |    |
88          | 20 |   |   |   |   | 21 |
89         And the places
90          | osm | class | type  | street|
91          | N1  | place | house | south |
92          | N2  | place | house | north |
93          | N3  | place | house | south |
94          | N4  | place | house | north |
95         And the places
96          | osm | class   | type        | name  | geometry |
97          | W1  | highway | residential | north | 10,11    |
98          | W2  | highway | residential | south | 20,21    |
99         When importing
100         Then placex contains
101          | object | parent_place_id |
102          | N1     | W2 |
103          | N2     | W1 |
104          | N3     | W2 |
105          | N4     | W1 |
106
107     Scenario: addr:street tag parents to appropriately named street, locale names
108         Given the grid
109          | 10 |   |   |   |   | 11 |
110          |    | 1 | 2 |   |   |    |
111          |    |   |   | 3 | 4 |    |
112          | 20 |   |   |   |   | 21 |
113         And the places
114          | osm | class | type  | street| addr+street:de |
115          | N1  | place | house | south | Süd            |
116          | N2  | place | house | north | Nord           |
117          | N3  | place | house | south | Süd            |
118          | N4  | place | house | north | Nord           |
119         And the places
120          | osm | class   | type        | name  | geometry |
121          | W1  | highway | residential | Nord  | 10,11    |
122          | W2  | highway | residential | Süd   | 20,21    |
123         When importing
124         Then placex contains
125          | object | parent_place_id |
126          | N1     | W2 |
127          | N2     | W1 |
128          | N3     | W2 |
129          | N4     | W1 |
130
131     Scenario: addr:street tag parents to appropriately named street with abbreviation
132         Given the grid
133          | 10 |   |   |   |   | 11 |
134          |    | 1 | 2 |   |   |    |
135          |    |   |   | 3 | 4 |    |
136          | 20 |   |   |   |   | 21 |
137         And the places
138          | osm | class | type  | street   |
139          | N1  | place | house | south st |
140          | N2  | place | house | north st |
141          | N3  | place | house | south st |
142          | N4  | place | house | north st |
143         And the places
144          | osm | class   | type        | name+name:en | geometry |
145          | W1  | highway | residential | north street | 10,11    |
146          | W2  | highway | residential | south street | 20,21    |
147         When importing
148         Then placex contains
149          | object | parent_place_id |
150          | N1     | W2 |
151          | N2     | W1 |
152          | N3     | W2 |
153          | N4     | W1 |
154
155     Scenario: addr:street tag parents to next named street
156         Given the grid
157          | 10 |   |   |   |   | 11 |
158          |    | 1 | 2 |   |   |    |
159          |    |   |   | 3 | 4 |    |
160          | 20 |   |   |   |   | 21 |
161         And the places
162          | osm | class | type  | street |
163          | N1  | place | house | abcdef |
164          | N2  | place | house | abcdef |
165          | N3  | place | house | abcdef |
166          | N4  | place | house | abcdef |
167         And the places
168          | osm | class   | type        | name   | geometry |
169          | W1  | highway | residential | abcdef | 10,11    |
170          | W2  | highway | residential | abcdef | 20,21    |
171         When importing
172         Then placex contains
173          | object | parent_place_id |
174          | N1     | W1 |
175          | N2     | W1 |
176          | N3     | W2 |
177          | N4     | W2 |
178
179     Scenario: addr:street tag without appropriately named street
180         Given the grid
181          | 10 |   |   |   |   | 11 |
182          |    | 1 |   |   |   |    |
183          |    |   |   | 3 |   |    |
184          | 20 |   |   |   |   | 21 |
185         And the places
186          | osm | class | type  | street |
187          | N1  | place | house | abcdef |
188          | N3  | place | house | abcdef |
189         And the places
190          | osm | class   | type        | name  | geometry |
191          | W1  | highway | residential | abcde | 10,11    |
192          | W2  | highway | residential | abcde | 20,21    |
193         When importing
194         Then placex contains
195          | object | parent_place_id |
196          | N1     | W1 |
197          | N3     | W2 |
198
199     Scenario: addr:place address
200         Given the grid
201          | 10 |   | |   |
202          |    | 1 | | 2 |
203          | 11 |   | |   |
204         And the places
205          | osm | class | type   | addr_place |
206          | N1  | place | house  | myhamlet   |
207         And the places
208          | osm | class   | type        | name     | geometry |
209          | N2  | place   | hamlet      | myhamlet | 2 |
210          | W1  | highway | residential | myhamlet | 10,11 |
211         When importing
212         Then placex contains
213          | object | parent_place_id |
214          | N1     | N2 |
215
216     Scenario: addr:street is preferred over addr:place
217         Given the grid
218          | 10 |  |   |   |
219          |    |  | 1 | 2 |
220          | 11 |  |   |   |
221         And the places
222          | osm | class | type   | addr_place | street  |
223          | N1  | place | house  | myhamlet   | mystreet|
224         And the places
225          | osm | class   | type        | name     | geometry |
226          | N2  | place   | hamlet      | myhamlet | 2        |
227          | W1  | highway | residential | mystreet | 10,11    |
228         When importing
229         Then placex contains
230          | object | parent_place_id |
231          | N1     | W1 |
232
233     Scenario: Untagged address in simple associated street relation
234         Given the grid
235          | 10 |   |   |   |   | 11 |
236          |    | 2 |   | 3 |   |    |
237          |    |   |   |   |   |    |
238          | 12 | 1 |   |   |   |    |
239         And the places
240          | osm | class | type  |
241          | N1  | place | house |
242          | N2  | place | house |
243          | N3  | place | house |
244         And the places
245          | osm | class   | type        | name | geometry |
246          | W1  | highway | residential | foo  | 10,11 |
247          | W2  | highway | service     | bar  | 10,12 |
248         And the relations
249          | id | members            | tags+type |
250          | 1  | W1:street,N1,N2,N3 | associatedStreet |
251         When importing
252         Then placex contains
253          | object | parent_place_id |
254          | N1     | W1 |
255          | N2     | W1 |
256          | N3     | W1 |
257
258     Scenario: Avoid unnamed streets in simple associated street relation
259         Given the grid
260          | 10 |   |   |   |   | 11 |
261          |    | 2 |   | 3 |   |    |
262          |    |   |   |   |   |    |
263          | 12 | 1 |   |   |   |    |
264         And the places
265          | osm | class | type  |
266          | N1  | place | house |
267          | N2  | place | house |
268          | N3  | place | house |
269         And the places
270          | osm | class   | type        | geometry |
271          | W2  | highway | residential | 10,12    |
272         And the named places
273          | osm | class   | type        | geometry |
274          | W1  | highway | residential | 10,11    |
275         And the relations
276          | id | members                      | tags+type |
277          | 1  | N1,N2,N3,W2:street,W1:street | associatedStreet |
278         When importing
279         Then placex contains
280          | object | parent_place_id |
281          | N1     | W1 |
282          | N2     | W1 |
283          | N3     | W1 |
284
285     Scenario: Associated street relation overrides addr:street
286         Given the grid
287          | 10 |    |   |    | 11 |
288          |    |    |   |    |    |
289          |    |    | 1 |    |    |
290          |    | 20 |   | 21 |    |
291         And the places
292          | osm | class | type  | street |
293          | N1  | place | house | bar    |
294         And the places
295          | osm | class   | type        | name | geometry |
296          | W1  | highway | residential | foo  | 10,11    |
297          | W2  | highway | residential | bar  | 20,21    |
298         And the relations
299          | id | members      | tags+type |
300          | 1  | W1:street,N1 | associatedStreet |
301         When importing
302         Then placex contains
303          | object | parent_place_id |
304          | N1     | W1 |
305
306     Scenario: Building without tags, closest street from center point
307         Given the grid
308          | 10 |  |   |   | 11 |
309          |    |  | 1 | 2 |    |
310          | 12 |  | 4 | 3 |    |
311         And the named places
312          | osm | class    | type        | geometry    |
313          | W1  | building | yes         | (1,2,3,4,1) |
314          | W2  | highway  | primary     | 10,11       |
315          | W3  | highway  | residential | 10,12       |
316         When importing
317         Then placex contains
318          | object | parent_place_id |
319          | W1     | W2 |
320
321     Scenario: Building with addr:street tags
322         Given the grid
323          | 10 |  |   |   | 11 |
324          |    |  | 1 | 2 |    |
325          | 12 |  | 4 | 3 |    |
326         And the named places
327          | osm | class    | type | street | geometry |
328          | W1  | building | yes  | foo    | (1,2,3,4,1) |
329         And the places
330          | osm | class    | type        | name | geometry |
331          | W2  | highway  | primary     | bar  | 10,11    |
332          | W3  | highway  | residential | foo  | 10,12    |
333         When importing
334         Then placex contains
335          | object | parent_place_id |
336          | W1     | W3 |
337
338     Scenario: Building with addr:place tags
339         Given the grid
340          | 10 |   |   |   |   |
341          |    | 1 | 2 |   | 9 |
342          | 11 | 4 | 3 |   |   |
343         And the places
344          | osm | class    | type        | name | geometry |
345          | N9  | place    | village     | bar  | 9        |
346          | W2  | highway  | primary     | bar  | 10,11    |
347         And the named places
348          | osm | class    | type | addr_place | geometry    |
349          | W1  | building | yes  | bar        | (1,2,3,4,1) |
350         When importing
351         Then placex contains
352          | object | parent_place_id |
353          | W1     | N9 |
354
355     Scenario: Building in associated street relation
356         Given the grid
357          | 10 |  |   |   | 11 |
358          |    |  | 1 | 2 |    |
359          | 12 |  | 4 | 3 |    |
360         And the named places
361          | osm | class    | type | geometry    |
362          | W1  | building | yes  | (1,2,3,4,1) |
363         And the places
364          | osm | class    | type        | name | geometry |
365          | W2  | highway  | primary     | bar  | 10,11 |
366          | W3  | highway  | residential | foo  | 10,12 |
367         And the relations
368          | id | members            | tags+type |
369          | 1  | W1:house,W3:street | associatedStreet |
370         When importing
371         Then placex contains
372          | object | parent_place_id |
373          | W1     | W3 |
374
375     Scenario: Building in associated street relation overrides addr:street
376         Given the grid
377          | 10 |  |   |   | 11 |
378          |    |  | 1 | 2 |    |
379          | 12 |  | 4 | 3 |    |
380         And the named places
381          | osm | class    | type | street | geometry    |
382          | W1  | building | yes  | foo    | (1,2,3,4,1) |
383         And the places
384          | osm | class    | type        | name | geometry |
385          | W2  | highway  | primary     | bar  | 10,11 |
386          | W3  | highway  | residential | foo  | 10,12 |
387         And the relations
388          | id | members            | tags+type |
389          | 1  | W1:house,W2:street | associatedStreet |
390         When importing
391         Then placex contains
392          | object | parent_place_id |
393          | W1     | W2 |
394
395     Scenario: Wrong member in associated street relation is ignored
396         Given the grid
397          | 10 |   |   |   |   |   |   | 11 |
398          |    | 1 |   | 3 | 4 |   |   |    |
399          |    |   |   | 6 | 5 |   |   |    |
400          And the named places
401          | osm | class | type  | geometry |
402          | N1  | place | house | 11       |
403         And the named places
404          | osm | class    | type | street | geometry    |
405          | W1  | building | yes  | foo    | (3,4,5,6,3) |
406         And the places
407          | osm | class    | type        | name | geometry |
408          | W3  | highway  | residential | foo  | 10,11    |
409         And the relations
410          | id | members                      | tags+type |
411          | 1  | N1:house,W1:street,W3:street | associatedStreet |
412         When importing
413         Then placex contains
414          | object | parent_place_id |
415          | N1     | W3 |
416
417     Scenario: street member in associatedStreet relation can be a relation
418         Given the grid
419           | 1 |   |   | 2 |
420           | 3 |   |   | 4 |
421           |   |   |   |   |
422           |   | 9 |   |   |
423           | 5 |   |   | 6 |
424         And the places
425           | osm | class | type  | housenr | geometry |
426           | N9  | place | house | 34      | 9        |
427         And the named places
428           | osm | class   | type       | name      | geometry    |
429           | R14 | highway | pedestrian | Right St  | (1,2,4,3,1) |
430           | W14 | highway | pedestrian | Left St   | 5,6         |
431         And the relations
432           | id | members             | tags+type |
433           | 1  | N9:house,R14:street | associatedStreet |
434         When importing
435         Then placex contains
436           | object | parent_place_id |
437           | N9     | R14             |
438
439
440     Scenario: Choose closest street in associatedStreet relation
441         Given the grid
442          | 1  |   |    |  | 3  |
443          | 10 |   | 11 |  | 12 |
444         And the places
445          | osm | class | type  | housenr | geometry |
446          | N1  | place | house | 1       | 1        |
447          | N3  | place | house | 3       | 3        |
448         And the named places
449          | osm  | class    | type        | geometry |
450          | W100 | highway  | residential | 10,11    |
451          | W101 | highway  | residential | 11,12    |
452         And the relations
453          | id | members                                            | tags+type |
454          | 1  | N1:house,N3:house,W100:street,W101:street | associatedStreet |
455         When importing
456         Then placex contains
457          | object | parent_place_id |
458          | N1     | W100            |
459          | N3     | W101            |
460
461
462     Scenario: POIs in building inherit address
463         Given the grid
464          | 10 |  |   |   |   |   | 11 |
465          |    |  | 5 | 2 | 6 |   |    |
466          |    |  | 3 | 1 |   |   |    |
467          | 12 |  | 8 |   | 7 |   |    |
468         And the named places
469          | osm | class   | type       |
470          | N1  | amenity | bank       |
471          | N2  | shop    | bakery     |
472          | N3  | shop    | supermarket|
473         And the places
474          | osm | class    | type | street | housenr | geometry    |
475          | W1  | building | yes  | foo    | 3       | (5,6,7,8,5) |
476         And the places
477          | osm | class    | type        | name | geometry |
478          | W2  | highway  | primary     | bar  | 10,11    |
479          | W3  | highway  | residential | foo  | 10,12    |
480         When importing
481         Then placex contains
482          | object | parent_place_id | housenumber |
483          | W1     | W3              | 3 |
484          | N1     | W3              | 3 |
485          | N2     | W3              | 3 |
486          | N3     | W3              | 3 |
487         When sending geocodejson search query "3, foo" with address
488         Then results contain
489          | housenumber |
490          | 3           |
491
492     Scenario: POIs don't inherit from streets
493         Given the grid
494          | 10 |   |   |   | 11 |
495          |    | 5 | 1 | 6 |    |
496          |    | 8 |   | 7 |    |
497         And the named places
498          | osm | class   | type  |
499          | N1  | amenity | bank  |
500         And the places
501          | osm | class    | type | name | street | housenr | geometry    |
502          | W1  | highway  | path | bar  | foo    | 3       | (5,6,7,8,5) |
503         And the places
504          | osm | class    | type        | name | geometry |
505          | W3  | highway  | residential | foo  | 10,11    |
506         When importing
507         Then placex contains
508          | object | parent_place_id | housenumber |
509          | N1     | W1              | None |
510
511     Scenario: POIs with own address do not inherit building address
512         Given the grid
513          | 10 |  |   |   |   |   | 11 |
514          |    |  | 6 | 2 | 7 |   |    |
515          |    |  | 3 | 1 |   | 5 |  4 |
516          | 12 |  | 9 |   | 8 |   |    |
517         And the named places
518          | osm | class   | type       | street |
519          | N1  | amenity | bank       | bar    |
520         And the named places
521          | osm | class   | type       | housenr |
522          | N2  | shop    | bakery     | 4       |
523         And the named places
524          | osm | class   | type       | addr_place  |
525          | N3  | shop    | supermarket| nowhere     |
526         And the places
527          | osm | class | type              | name     |
528          | N4  | place | isolated_dwelling | theplace |
529          | N5  | place | isolated_dwelling | nowhere  |
530         And the places
531          | osm | class    | type | addr_place | housenr | geometry    |
532          | W1  | building | yes  | theplace   | 3       | (6,7,8,9,6) |
533         And the places
534          | osm | class    | type        | name | geometry |
535          | W2  | highway  | primary     | bar  | 10,11    |
536          | W3  | highway  | residential | foo  | 10,12    |
537         When importing
538         Then placex contains
539          | object | parent_place_id | housenumber |
540          | W1     | N4              | 3 |
541          | N1     | W2              | None |
542          | N2     | W2              | 4 |
543          | N3     | N5              | None |
544
545     Scenario: POIs parent a road if they are attached to it
546         Given the grid
547          |    | 10 |    |
548          | 20 | 1  | 21 |
549          |    | 11 |    |
550         And the named places
551          | osm | class   | type     |
552          | N1  | highway | bus_stop |
553         And the places
554          | osm | class   | type         | name     | geometry |
555          | W1  | highway | secondary    | North St | 10,11 |
556          | W2  | highway | unclassified | South St | 20,1,21 |
557         And the ways
558          | id | nodes |
559          | 1  | 10,11 |
560          | 2  | 20,1,21 |
561         When importing
562         Then placex contains
563          | object | parent_place_id |
564          | N1     | W2 |
565
566     Scenario: POIs do not parent non-roads they are attached to
567         Given the grid
568          | 10 |   | 1 |   |  11 |  | 30 |
569          | 14 |   |   |   |  15 |  |    |
570          | 13 |   | 2 |   |  12 |  | 31 |
571         And the named places
572          | osm | class   | type     | street   |
573          | N1  | highway | bus_stop | North St |
574          | N2  | highway | bus_stop | South St |
575         And the places
576          | osm | class   | type         | name     | geometry |
577          | W1  | landuse | residential  | North St | (14,15,12,2,13,14) |
578          | W2  | waterway| river        | South St | 10,1,11  |
579          | W3  | highway | residential  | foo      | 30,31    |
580         And the ways
581          | id | nodes |
582          | 1  | 10,11,12,2,13,10 |
583          | 2  | 10,1,11 |
584         When importing
585         Then placex contains
586          | object | parent_place_id |
587          | N1     | W3 |
588          | N2     | W3 |
589
590     Scenario: POIs on building outlines inherit associated street relation
591         Given the grid
592          | 10 |   |   |   | 11 |
593          |    | 5 | 1 | 6 |    |
594          | 12 | 8 |   | 7 |    |
595         And the named places
596          | osm | class    | type  | geometry     |
597          | N1  | place    | house | 1            |
598          | W1  | building | yes   | (5,1,6,7,8,5)|
599         And the places
600          | osm | class    | type        | name | geometry |
601          | W2  | highway  | primary     | bar  | 10,11    |
602          | W3  | highway  | residential | foo  | 10,12    |
603         And the relations
604          | id | members            | tags+type |
605          | 1  | W1:house,W3:street | associatedStreet |
606         And the ways
607          | id | nodes |
608          | 1  | 5,1,6,7,8,5 |
609         When importing
610         Then placex contains
611          | object | parent_place_id |
612          | N1     | W3 |
613
614     # github #1056
615     Scenario: Full names should be preferably matched for nearest road
616         Given the grid
617             | 1 |   | 2 | 5 |
618             |   |   |   |   |
619             | 3 |   |   | 4 |
620             |   | 10|   |   |
621         And the places
622             | osm | class   | type    | name+name               | geometry |
623             | W1  | highway | residential | Via Cavassico superiore | 1, 2 |
624             | W3  | highway | residential | Via Cavassico superiore | 2, 5 |
625             | W2  | highway | primary | Via Frazione Cavassico  | 3, 4     |
626         And the named places
627             | osm | class   | type    | addr+street             |
628             | N10 | shop    | yes     | Via Cavassico superiore |
629         When importing
630         Then placex contains
631           | object | parent_place_id |
632           | N10    | W1 |
633
634      Scenario: place=square may be parented via addr:place
635         Given the grid
636             |   |   | 9 |   |   |
637             |   | 5 |   | 6 |   |
638             |   | 8 |   | 7 |   |
639         And the places
640             | osm | class    | type    | name+name | geometry        |
641             | W2  | place    | square  | Foo pl    | (5, 6, 7, 8, 5) |
642         And the places
643             | osm | class    | type    | name+name | housenr | addr_place | geometry |
644             | N10 | shop     | grocery | le shop   | 5       | Foo pl     | 9        |
645         When importing
646         Then placex contains
647             | object | rank_address |
648             | W2     | 25           |
649         Then placex contains
650             | object | parent_place_id |
651             | N10    | W2              |
652