]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/import/parenting.feature
ICU: matching any street name will do again
[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 next named street
115         Given the scene roads-with-pois
116         And the places
117          | osm | class | type  | street | geometry |
118          | N1  | place | house | abcdef | :p-N1 |
119          | N2  | place | house | abcdef | :p-N2 |
120          | N3  | place | house | abcdef | :p-S1 |
121          | N4  | place | house | abcdef | :p-S2 |
122         And the places
123          | osm | class   | type        | name   | geometry |
124          | W1  | highway | residential | abcdef | :w-north |
125          | W2  | highway | residential | abcdef | :w-south |
126         When importing
127         Then placex contains
128          | object | parent_place_id |
129          | N1     | W1 |
130          | N2     | W1 |
131          | N3     | W2 |
132          | N4     | W2 |
133
134     Scenario: addr:street tag without appropriately named street
135         Given the scene roads-with-pois
136         And the places
137          | osm | class | type  | street | geometry |
138          | N1  | place | house | abcdef | :p-N1 |
139          | N2  | place | house | abcdef | :p-N2 |
140          | N3  | place | house | abcdef | :p-S1 |
141          | N4  | place | house | abcdef | :p-S2 |
142         And the places
143          | osm | class   | type        | name  | geometry |
144          | W1  | highway | residential | abcde | :w-north |
145          | W2  | highway | residential | abcde | :w-south |
146         When importing
147         Then placex contains
148          | object | parent_place_id |
149          | N1     | W1 |
150          | N2     | W1 |
151          | N3     | W2 |
152          | N4     | W2 |
153
154     Scenario: addr:place address
155         Given the scene road-with-alley
156         And the places
157          | osm | class | type   | addr_place | geometry |
158          | N1  | place | house  | myhamlet   | :n-alley |
159         And the places
160          | osm | class   | type        | name     | geometry |
161          | N2  | place   | hamlet      | myhamlet | :n-main-west |
162          | W1  | highway | residential | myhamlet | :w-main |
163         When importing
164         Then placex contains
165          | object | parent_place_id |
166          | N1     | N2 |
167
168     Scenario: addr:street is preferred over addr:place
169         Given the scene road-with-alley
170         And the places
171          | osm | class | type   | addr_place | street  | geometry |
172          | N1  | place | house  | myhamlet   | mystreet| :n-alley |
173         And the places
174          | osm | class   | type        | name     | geometry |
175          | N2  | place   | hamlet      | myhamlet | :n-main-west |
176          | W1  | highway | residential | mystreet | :w-main |
177         When importing
178         Then placex contains
179          | object | parent_place_id |
180          | N1     | W1 |
181
182     Scenario: Untagged address in simple associated street relation
183         Given the scene road-with-alley
184         And the places
185          | osm | class | type  | geometry |
186          | N1  | place | house | :n-alley |
187          | N2  | place | house | :n-corner |
188          | N3  | place | house | :n-main-west |
189         And the places
190          | osm | class   | type        | name | geometry |
191          | W1  | highway | residential | foo  | :w-main |
192          | W2  | highway | service     | bar  | :w-alley |
193         And the relations
194          | id | members            | tags+type |
195          | 1  | W1:street,N1,N2,N3 | associatedStreet |
196         When importing
197         Then placex contains
198          | object | parent_place_id |
199          | N1     | W1 |
200          | N2     | W1 |
201          | N3     | W1 |
202
203     Scenario: Avoid unnamed streets in simple associated street relation
204         Given the scene road-with-alley
205         And the places
206          | osm | class | type  | geometry |
207          | N1  | place | house | :n-alley |
208          | N2  | place | house | :n-corner |
209          | N3  | place | house | :n-main-west |
210          | W2  | highway | residential | :w-alley |
211         And the named places
212          | osm | class   | type        | geometry |
213          | W1  | highway | residential | :w-main |
214         And the relations
215          | id | members                      | tags+type |
216          | 1  | N1,N2,N3,W2:street,W1:street | associatedStreet |
217         When importing
218         Then placex contains
219          | object | parent_place_id |
220          | N1     | W1 |
221          | N2     | W1 |
222          | N3     | W1 |
223
224     Scenario: Associated street relation overrides addr:street
225         Given the scene road-with-alley
226         And the places
227          | osm | class | type  | street | geometry |
228          | N1  | place | house | bar    | :n-alley |
229         And the places
230          | osm | class   | type        | name | geometry |
231          | W1  | highway | residential | foo  | :w-main |
232          | W2  | highway | residential | bar  | :w-alley |
233         And the relations
234          | id | members            | tags+type |
235          | 1  | W1:street,N1,N2,N3 | associatedStreet |
236         When importing
237         Then placex contains
238          | object | parent_place_id |
239          | N1     | W1 |
240
241     Scenario: Building without tags, closest street from center point
242         Given the scene building-on-street-corner
243         And the named places
244          | osm | class    | type        | geometry |
245          | W1  | building | yes         | :w-building |
246          | W2  | highway  | primary     | :w-WE |
247          | W3  | highway  | residential | :w-NS |
248         When importing
249         Then placex contains
250          | object | parent_place_id |
251          | W1     | W2 |
252
253     Scenario: Building with addr:street tags
254         Given the scene building-on-street-corner
255         And the named places
256          | osm | class    | type | street | geometry |
257          | W1  | building | yes  | bar    | :w-building |
258         And the places
259          | osm | class    | type        | name | geometry |
260          | W2  | highway  | primary     | bar  | :w-WE |
261          | W3  | highway  | residential | foo  | :w-NS |
262         When importing
263         Then placex contains
264          | object | parent_place_id |
265          | W1     | W2 |
266
267     Scenario: Building with addr:place tags
268         Given the scene building-on-street-corner
269         And the places
270          | osm | class    | type        | name | geometry |
271          | N1  | place    | village     | bar  | :n-outer |
272          | W2  | highway  | primary     | bar  | :w-WE |
273          | W3  | highway  | residential | foo  | :w-NS |
274         And the named places
275          | osm | class    | type | addr_place | geometry |
276          | W1  | building | yes  | bar        | :w-building |
277         When importing
278         Then placex contains
279          | object | parent_place_id |
280          | W1     | N1 |
281
282     Scenario: Building in associated street relation
283         Given the scene building-on-street-corner
284         And the named places
285          | osm | class    | type | geometry |
286          | W1  | building | yes  | :w-building |
287         And the places
288          | osm | class    | type        | name | geometry |
289          | W2  | highway  | primary     | bar  | :w-WE |
290          | W3  | highway  | residential | foo  | :w-NS |
291         And the relations
292          | id | members            | tags+type |
293          | 1  | W1:house,W2:street | associatedStreet |
294         When importing
295         Then placex contains
296          | object | parent_place_id |
297          | W1     | W2 |
298
299     Scenario: Building in associated street relation overrides addr:street
300         Given the scene building-on-street-corner
301         And the named places
302          | osm | class    | type | street | geometry |
303          | W1  | building | yes  | foo    | :w-building |
304         And the places
305          | osm | class    | type        | name | geometry |
306          | W2  | highway  | primary     | bar  | :w-WE |
307          | W3  | highway  | residential | foo  | :w-NS |
308         And the relations
309          | id | members            | tags+type |
310          | 1  | W1:house,W2:street | associatedStreet |
311         When importing
312         Then placex contains
313          | object | parent_place_id |
314          | W1     | W2 |
315
316     Scenario: Wrong member in associated street relation is ignored
317         Given the scene building-on-street-corner
318         And the named places
319          | osm | class | type  | geometry |
320          | N1  | place | house | :n-outer |
321         And the named places
322          | osm | class    | type | street | geometry |
323          | W1  | building | yes  | foo    | :w-building |
324         And the places
325          | osm | class    | type        | name | geometry |
326          | W2  | highway  | primary     | bar  | :w-WE |
327          | W3  | highway  | residential | foo  | :w-NS |
328         And the relations
329          | id | members                      | tags+type |
330          | 1  | N1:house,W1:street,W3:street | associatedStreet |
331         When importing
332         Then placex contains
333          | object | parent_place_id |
334          | N1     | W3 |
335
336     Scenario: POIs in building inherit address
337         Given the scene building-on-street-corner
338         And the named places
339          | osm | class   | type       | geometry |
340          | N1  | amenity | bank       | :n-inner |
341          | N2  | shop    | bakery     | :n-edge-NS |
342          | N3  | shop    | supermarket| :n-edge-WE |
343         And the places
344          | osm | class    | type | street | addr_place | housenr | geometry |
345          | W1  | building | yes  | foo    | nowhere    | 3       | :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         When importing
351         Then placex contains
352          | object | parent_place_id | housenumber |
353          | W1     | W3              | 3 |
354          | N1     | W3              | 3 |
355          | N2     | W3              | 3 |
356          | N3     | W3              | 3 |
357
358     Scenario: POIs don't inherit from streets
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         And the places
364          | osm | class    | type | street | addr_place | housenr | geometry |
365          | W1  | highway  | path | foo    | nowhere    | 3       | :w-building |
366         And the places
367          | osm | class    | type        | name | geometry |
368          | W3  | highway  | residential | foo  | :w-NS |
369         When importing
370         Then placex contains
371          | object | parent_place_id | housenumber |
372          | N1     | W3              | None |
373
374     Scenario: POIs with own address do not inherit building address
375         Given the scene building-on-street-corner
376         And the named places
377          | osm | class   | type       | street | geometry |
378          | N1  | amenity | bank       | bar    | :n-inner |
379         And the named places
380          | osm | class   | type       | housenr | geometry |
381          | N2  | shop    | bakery     | 4       | :n-edge-NS |
382         And the named places
383          | osm | class   | type       | addr_place  | geometry |
384          | N3  | shop    | supermarket| nowhere     | :n-edge-WE |
385         And the places
386          | osm | class | type              | name     | geometry |
387          | N4  | place | isolated_dwelling | theplace | :n-outer |
388         And the places
389          | osm | class    | type | addr_place | housenr | geometry |
390          | W1  | building | yes  | theplace   | 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     | N4              | 3 |
399          | N1     | W2              | None |
400          | N2     | W3              | 4 |
401          | N3     | N4              | None |
402
403     Scenario: POIs parent a road if they are attached to it
404         Given the scene points-on-roads
405         And the named places
406          | osm | class   | type     | street   | geometry |
407          | N1  | highway | bus_stop | North St | :n-SE |
408          | N2  | highway | bus_stop | South St | :n-NW |
409          | N3  | highway | bus_stop | North St | :n-S-unglued |
410          | N4  | highway | bus_stop | South St | :n-N-unglued |
411         And the places
412          | osm | class   | type         | name     | geometry |
413          | W1  | highway | secondary    | North St | :w-north |
414          | W2  | highway | unclassified | South St | :w-south |
415         And the ways
416          | id | nodes |
417          | 1  | 100,101,2,103,104 |
418          | 2  | 200,201,1,202,203 |
419         When importing
420         Then placex contains
421          | object | parent_place_id |
422          | N1     | W1 |
423          | N2     | W2 |
424          | N3     | W1 |
425          | N4     | W2 |
426
427     Scenario: POIs do not parent non-roads they are attached to
428         Given the scene points-on-roads
429         And the named places
430          | osm | class   | type     | street   | geometry |
431          | N1  | highway | bus_stop | North St | :n-SE |
432          | N2  | highway | bus_stop | South St | :n-NW |
433         And the places
434          | osm | class   | type         | name     | geometry |
435          | W1  | landuse | residential  | North St | :w-north |
436          | W2  | waterway| river        | 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     | 0 |
445          | N2     | 0 |
446
447     Scenario: POIs on building outlines inherit associated street relation
448         Given the scene building-on-street-corner
449         And the named places
450          | osm | class    | type  | geometry |
451          | N1  | place    | house | :n-edge-NS |
452          | W1  | building | yes   | :w-building |
453         And the places
454          | osm | class    | type        | name | geometry |
455          | W2  | highway  | primary     | bar  | :w-WE |
456          | W3  | highway  | residential | foo  | :w-NS |
457         And the relations
458          | id | members            | tags+type |
459          | 1  | W1:house,W2:street | associatedStreet |
460         And the ways
461          | id | nodes |
462          | 1  | 100,1,101,102,100 |
463         When importing
464         Then placex contains
465          | object | parent_place_id |
466          | N1     | W2 |
467
468     # github #1056
469     Scenario: Full names should be preferably matched for nearest road
470         Given the grid
471             | 1 |   | 2 | 5 |
472             |   |   |   |   |
473             | 3 |   |   | 4 |
474             |   | 10|   |   |
475         And the places
476             | osm | class   | type    | name+name               | geometry |
477             | W1  | highway | residential | Via Cavassico superiore | 1, 2 |
478             | W3  | highway | residential | Via Cavassico superiore | 2, 5 |
479             | W2  | highway | primary | Via Frazione Cavassico  | 3, 4     |
480         And the named places
481             | osm | class   | type    | addr+street             |
482             | N10 | shop    | yes     | Via Cavassico superiore |
483         When importing
484         Then placex contains
485           | object | parent_place_id |
486           | N10    | W1 |
487
488      Scenario: place=square may be parented via addr:place
489         Given the grid
490             |   |   | 9 |   |   |
491             |   | 5 |   | 6 |   |
492             |   | 8 |   | 7 |   |
493         And the places
494             | osm | class    | type    | name+name | geometry        |
495             | W2  | place    | square  | Foo pl    | (5, 6, 7, 8, 5) |
496         And the places
497             | osm | class    | type    | name+name | housenr | addr_place | geometry |
498             | N10 | shop     | grocery | le shop   | 5       | Foo pl     | 9        |
499         When importing
500         Then placex contains
501             | object | rank_address |
502             | W2     | 25           |
503         Then placex contains
504             | object | parent_place_id |
505             | N10    | W2              |
506