]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/import/addressing.feature
improve address ordering with mixes of place and admin areas
[nominatim.git] / test / bdd / db / import / addressing.feature
1 @DB
2 Feature: Address computation
3     Tests for filling of place_addressline
4
5     Scenario: place nodes are added to the address when they are close enough
6         Given the 0.002 grid
7             | 2 |  |  |  |  |  | 1 |  | 3 |
8         And the places
9             | osm | class | type     | name      | geometry |
10             | N1  | place | square   | Square    | 1 |
11             | N2  | place | hamlet   | West Farm | 2 |
12             | N3  | place | hamlet   | East Farm | 3 |
13         When importing
14         Then place_addressline contains
15             | object | address | fromarea |
16             | N1     | N3      | False |
17         Then place_addressline doesn't contain
18             | object | address |
19             | N1     | N2      |
20         When sending search query "Square"
21         Then results contain
22            | osm | display_name      |
23            | N1  | Square, East Farm |
24
25     Scenario: given two place nodes, the closer one wins for the address
26         Given the grid
27             | 2 |  |  | 1 |  | 3 |
28         And the named places
29             | osm | class | type     | geometry |
30             | N1  | place | square   | 1 |
31             | N2  | place | hamlet   | 2 |
32             | N3  | place | hamlet   | 3 |
33         When importing
34         Then place_addressline contains
35             | object | address | fromarea | isaddress |
36             | N1     | N3      | False    | True |
37             | N1     | N2      | False    | False |
38
39     Scenario: boundaries around the place are added to the address
40         Given the grid
41             | 1 |    | 4 | | 7 | 10 |
42             | 2 |    | 5 | | 8 | 11 |
43             |   |    |   | |   |    |
44             |   |    |   | |   |    |
45             |   |    | 6 | | 9 |    |
46             |   | 99 |   | |   |    |
47             | 3 |    |   | |   | 12 |
48         And the named places
49             | osm | class    | type           | admin | geometry |
50             | R1  | boundary | administrative | 3     | (1,2,3,12,11,10,7,8,9,6,5,4,1) |
51             | R2  | boundary | administrative | 4     | (2,3,12,11,8,9,6,5,2) |
52             | N1  | place    | square         | 15    | 99 |
53         When importing
54         Then place_addressline contains
55             | object | address | isaddress |
56             | N1     | R1      | True |
57             | N1     | R2      | True |
58
59     Scenario: with boundaries of same rank the one with the closer centroid is prefered
60         Given the grid
61             | 1 |   |   | 3 |  | 5 |
62             |   | 9 |   |   |  |   |
63             | 2 |   |   | 4 |  | 6 |
64         And the named places
65             | osm | class    | type           | admin | geometry |
66             | R1  | boundary | administrative | 8     | (1,2,4,3,1) |
67             | R2  | boundary | administrative | 8     | (1,2,6,5,1) |
68             | N1  | place    | square         | 15    | 9 |
69         When importing
70         Then place_addressline contains
71             | object | address | isaddress |
72             | N1     | R1      | True |
73             | N1     | R2      | False |
74
75     Scenario: boundary areas are preferred over place nodes in the address
76         Given the grid
77             | 1 |   |   |   | 10 |   | 3 |
78             |   | 5 |   |   |    |   |   |
79             |   | 6 |   |   |    |   |   |
80             | 2 |   |   |   | 11 |   | 4 |
81         And the named places
82             | osm | class    | type           | admin | geometry |
83             | N1  | place    | square         | 15    | 5 |
84             | N2  | place    | city           | 15    | 6 |
85             | R1  | place    | city           | 8     | (1,2,4,3,1) |
86             | R2  | boundary | administrative | 9     | (1,10,11,2,1) |
87         When importing
88         Then place_addressline contains
89             | object | address | isaddress | cached_rank_address |
90             | N1     | R1      | True      | 16                  |
91             | N1     | R2      | True      | 18                  |
92             | N1     | N2      | False     | 18                  |
93
94     Scenario: place nodes outside a smaller ranked area are ignored
95         Given the grid
96             | 1 |   | 2 |   |
97             |   | 7 |   | 9 |
98             | 4 |   | 3 |   |
99         And the named places
100             | osm | class    | type    | admin | geometry |
101             | N1  | place    | square  | 15    | 7 |
102             | N2  | place    | city    | 15    | 9 |
103             | R1  | place    | city    | 8     | (1,2,3,4,1) |
104         When importing
105         Then place_addressline contains
106             | object | address | isaddress | cached_rank_address |
107             | N1     | R1      | True      | 16                  |
108         And place_addressline doesn't contain
109             | object | address |
110             | N1     | N2      |
111
112
113     Scenario: place nodes close enough to smaller ranked place nodes are included
114         Given the 0.002 grid
115             | 2 |   | 3 | 1 |
116         And the named places
117             | osm | class | type     | geometry |
118             | N1  | place | square   | 1 |
119             | N2  | place | hamlet   | 2 |
120             | N3  | place | quarter  | 3 |
121         When importing
122         Then place_addressline contains
123             | object | address | fromarea | isaddress |
124             | N1     | N2      | False    | True      |
125             | N1     | N3      | False    | True      |
126
127
128     Scenario: place nodes too far away from a smaller ranked place nodes are marked non-address
129         Given the 0.002 grid
130             | 2 |  |  | 1 |  | 3 |
131         And the named places
132             | osm | class | type     | geometry |
133             | N1  | place | square   | 1 |
134             | N2  | place | hamlet   | 2 |
135             | N3  | place | quarter  | 3 |
136         When importing
137         Then place_addressline contains
138             | object | address | fromarea | isaddress |
139             | N1     | N2      | False    | True      |
140             | N1     | N3      | False    | False     |
141
142
143     # github #121
144     Scenario: Roads crossing boundaries should contain both states
145         Given the grid
146             | 1 |   |   | 2 |   | 3 |
147             |   | 7 |   |   | 8 |   |
148             | 4 |   |   | 5 |   | 6 |
149         And the named places
150             | osm | class   | type | geometry |
151             | W1  | highway | road | 7, 8     |
152         And the named places
153             | osm | class    | type           | admin | geometry      |
154             | W10 | boundary | administrative | 5     | (1, 2, 5, 4, 1) |
155             | W11 | boundary | administrative | 5     | (2, 3, 6, 5, 2) |
156         When importing
157         Then place_addressline contains
158             | object | address | cached_rank_address |
159             | W1     | W10     | 10                  |
160             | W1     | W11     | 10                  |
161
162
163     Scenario: Roads following a boundary should contain both states
164         Given the grid
165             | 1 |   |   | 2 |   | 3 |
166             |   |   | 8 | 7 |   |   |
167             | 4 |   |   | 5 |   | 6 |
168         And the named places
169             | osm | class   | type | geometry |
170             | W1  | highway | road | 2, 7, 8  |
171         And the named places
172             | osm | class    | type           | admin | geometry      |
173             | W10 | boundary | administrative | 5     | (1, 2, 5, 4, 1) |
174             | W11 | boundary | administrative | 5     | (2, 3, 6, 5, 2) |
175         When importing
176         Then place_addressline contains
177             | object | address | cached_rank_address |
178             | W1     | W10     | 10                  |
179             | W1     | W11     | 10                  |
180
181     Scenario: Roads should not contain boundaries they touch in a end point
182         Given the grid
183             | 1 |   |   | 2 |   | 3 |
184             |   | 7 |   | 8 |   |   |
185             | 4 |   |   | 5 |   | 6 |
186         And the named places
187             | osm | class   | type | geometry |
188             | W1  | highway | road | 7, 8     |
189         And the named places
190             | osm | class    | type           | admin | geometry      |
191             | W10 | boundary | administrative | 5     | (1, 2, 8, 5, 4, 1) |
192             | W11 | boundary | administrative | 5     | (2, 3, 6, 5, 8, 2) |
193         When importing
194         Then place_addressline contains
195             | object | address | cached_rank_address |
196             | W1     | W10     | 10                  |
197         Then place_addressline doesn't contain
198             | object | address |
199             | W1     | W11     |
200
201     Scenario: Roads should not contain boundaries they touch in a middle point
202         Given the grid
203             | 1 |   |   | 2 |   | 3 |
204             |   | 7 |   | 8 |   |   |
205             | 4 |   | 9 | 5 |   | 6 |
206         And the named places
207             | osm | class   | type | geometry |
208             | W1  | highway | road | 7, 8, 9     |
209         And the named places
210             | osm | class    | type           | admin | geometry      |
211             | W10 | boundary | administrative | 5     | (1, 2, 8, 5, 4, 1) |
212             | W11 | boundary | administrative | 5     | (2, 3, 6, 5, 8, 2) |
213         When importing
214         Then place_addressline contains
215             | object | address | cached_rank_address |
216             | W1     | W10     | 10                  |
217         Then place_addressline doesn't contain
218             | object | address |
219             | W1     | W11     |
220
221     Scenario: Locality points should contain all boundaries they touch
222         Given the 0.001 grid
223             | 1 |   |   | 2 |   | 3 |
224             |   |   |   | 8 |   |   |
225             | 4 |   |   | 5 |   | 6 |
226         And the named places
227             | osm | class | type     | geometry |
228             | N1  | place | locality | 8        |
229         And the named places
230             | osm | class    | type           | admin | geometry      |
231             | W10 | boundary | administrative | 5     | (1, 2, 8, 5, 4, 1) |
232             | W11 | boundary | administrative | 5     | (2, 3, 6, 5, 8, 2) |
233         When importing
234         Then place_addressline contains
235             | object | address | cached_rank_address |
236             | N1     | W10     | 10                  |
237             | N1     | W11     | 10                  |
238
239     Scenario: Areas should not contain boundaries they touch
240         Given the grid
241             | 1 |   |   | 2 |   | 3 |
242             |   |   |   |   |   |   |
243             | 4 |   |   | 5 |   | 6 |
244         And the named places
245             | osm | class    | type           | geometry      |
246             | W1  | landuse  | industrial     | (1, 2, 5, 4, 1) |
247         And the named places
248             | osm | class    | type           | admin | geometry      |
249             | W10 | boundary | administrative | 5     | (2, 3, 6, 5, 2) |
250         When importing
251         Then place_addressline doesn't contain
252             | object | address |
253             | W1     | W10     |
254
255     Scenario: buildings with only addr:postcodes do not appear in the address of a way
256         Given the scene admin-areas
257         And the named places
258             | osm | class    | type           | admin | addr+postcode | geometry |
259             | R1  | boundary | administrative | 6     | 112           | :b0      |
260             | R34 | boundary | administrative | 8     | 112 DE        | :b1:E    |
261             | R4  | boundary | administrative | 10    | 112 DE 34     | :b2:N    |
262         And the named places
263             | osm | class    | type           | geometry |
264             | W93 | highway  | residential    | :w2N     |
265         And the places
266             | osm | class    | type        | addr+postcode | geometry |
267             | W22 | place    | postcode    | 445023        | :building:w2N |
268         When importing
269         Then place_addressline doesn't contain
270             | object | address  |
271             | W93    | W22      |
272
273     Scenario: postcode boundaries do appear in the address of a way
274         Given the scene admin-areas
275         And the named places
276             | osm | class    | type           | admin | addr+postcode | geometry |
277             | R1  | boundary | administrative | 6     | 112           | :b0      |
278             | R34 | boundary | administrative | 8     | 112 DE        | :b1:E    |
279         And the places
280             | osm | class    | type        | addr+postcode | geometry |
281             | R4  | boundary | postal_code | 112 DE 34     | :b2:N    |
282         And the named places
283             | osm | class    | type           | geometry |
284             | W93 | highway  | residential    | :w2N     |
285         And the places
286             | osm | class    | type        | addr+postcode | geometry |
287             | W22 | place    | postcode    | 445023        | :building:w2N |
288         When importing
289         Then place_addressline contains
290             | object | address |
291             | W93    | R4      |
292
293     Scenario: squares do not appear in the address of a street
294         Given the grid
295             |   | 1 |   | 2 |   |
296             | 8 |   |   |   | 9 |
297             |   | 4 |   | 3 |   |
298         And the named places
299             | osm | class    | type           | geometry |
300             | W1  | highway  | residential    | 8, 9     |
301             | W2  | place    | square         | (1, 2, 3 ,4, 1) |
302         When importing
303         Then place_addressline doesn't contain
304             | object | address |
305             | W1     | W2      |
306
307     Scenario: addr:* tags are honored even when a street is far away from the place
308         Given the grid
309             | 1 |   | 2 |   |   | 5 |
310             |   |   |   | 8 | 9 |   |
311             | 4 |   | 3 |   |   | 6 |
312         And the places
313             | osm | class    | type           | admin | name  | geometry    |
314             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
315             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
316         And the places
317             | osm | class   | type    | addr+city | geometry |
318             | W1  | highway | primary | Left      | 8,9      |
319             | W2  | highway | primary | Right     | 8,9      |
320         When importing
321         Then place_addressline contains
322            | object | address | isaddress |
323            | W1     | R1      | True      |
324            | W1     | R2      | False     |
325            | W2     | R2      | True      |
326         And place_addressline doesn't contain
327            | object | address |
328            | W2     | R1      |
329
330
331     Scenario: addr:* tags are honored even when a POI is far away from the place
332         Given the grid
333             | 1 |   | 2 |   |   | 5 |
334             |   |   |   | 8 | 9 |   |
335             | 4 |   | 3 |   |   | 6 |
336         And the places
337             | osm | class    | type           | admin | name  | geometry    |
338             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
339             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
340         And the places
341             | osm | class   | type    | name      | addr+city | geometry |
342             | W1  | highway | primary | Wonderway | Right     | 8,9      |
343             | N1  | amenity | cafe    | Bolder    | Left      | 9        |
344         When importing
345         Then place_addressline contains
346            | object | address | isaddress |
347            | W1     | R2      | True      |
348            | N1     | R1      | True      |
349         And place_addressline doesn't contain
350            | object | address |
351            | W1     | R1      |
352         When sending search query "Bolder"
353         Then results contain
354            | osm | display_name            |
355            | N1  | Bolder, Wonderway, Left |
356
357     Scenario: addr:* tags do not produce addresslines when the parent has the address part
358         Given the grid
359             | 1 |   |   | 5 |
360             |   | 8 | 9 |   |
361             | 4 |   |   | 6 |
362         And the places
363             | osm | class    | type           | admin | name  | geometry    |
364             | R1  | boundary | administrative | 8     | Outer | (1,5,6,4,1) |
365         And the places
366             | osm | class   | type    | name      | addr+city | geometry |
367             | W1  | highway | primary | Wonderway | Outer     | 8,9      |
368             | N1  | amenity | cafe    | Bolder    | Outer     | 9        |
369         When importing
370         Then place_addressline contains
371            | object | address | isaddress |
372            | W1     | R1      | True      |
373         And place_addressline doesn't contain
374            | object | address |
375            | N1     | R1      |
376         When sending search query "Bolder"
377         Then results contain
378            | osm | display_name             |
379            | N1  | Bolder, Wonderway, Outer |
380
381     Scenario: addr:* tags on outside do not produce addresslines when the parent has the address part
382         Given the grid
383             | 1 |   | 2 |   |   | 5 |
384             |   |   |   | 8 | 9 |   |
385             | 4 |   | 3 |   |   | 6 |
386         And the places
387             | osm | class    | type           | admin | name  | geometry    |
388             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
389             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
390         And the places
391             | osm | class   | type    | name      | addr+city | geometry |
392             | W1  | highway | primary | Wonderway | Left      | 8,9      |
393             | N1  | amenity | cafe    | Bolder    | Left      | 9        |
394         When importing
395         Then place_addressline contains
396            | object | address | isaddress |
397            | W1     | R1      | True      |
398            | W1     | R2      | False     |
399         And place_addressline doesn't contain
400            | object | address |
401            | N1     | R1      |
402         When sending search query "Bolder"
403         Then results contain
404            | osm | display_name            |
405            | N1  | Bolder, Wonderway, Left |
406
407     Scenario: POIs can correct address parts on the fly
408         Given the grid
409             | 1 |   |   |   |  2 |   | 5 |
410             |   |   |   | 9 |    | 8 |   |
411             | 4 |   |   |   |  3 |   | 6 |
412         And the places
413             | osm | class    | type           | admin | name  | geometry    |
414             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
415             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
416         And the places
417             | osm | class   | type    | name      | geometry |
418             | W1  | highway | primary | Wonderway | 2,3      |
419             | N1  | amenity | cafe    | Bolder    | 9        |
420             | N2  | amenity | cafe    | Leftside  | 8        |
421         When importing
422         Then place_addressline contains
423            | object | address | isaddress |
424            | W1     | R1      | False     |
425            | W1     | R2      | True      |
426         And place_addressline doesn't contain
427            | object | address |
428            | N1     | R1      |
429            | N2     | R2      |
430         When sending search query "Bolder"
431         Then results contain
432            | osm | display_name            |
433            | N1  | Bolder, Wonderway, Left |
434         When sending search query "Leftside"
435         Then results contain
436            | osm | display_name               |
437            | N2  | Leftside, Wonderway, Right |
438
439
440     Scenario: POIs can correct address parts on the fly (with partial unmatching address)
441         Given the grid
442             | 1 |   |   |   |  2 |   | 5 |
443             |   |   |   | 9 |    | 8 |   |
444             |   | 10| 11|   |    | 12|   |
445             | 4 |   |   |   |  3 |   | 6 |
446         And the places
447             | osm | class    | type           | admin | name  | geometry    |
448             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
449             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
450         And the places
451             | osm | class   | type    | name      | geometry |
452             | W1  | highway | primary | Wonderway | 10,11,12 |
453         And the places
454             | osm | class   | type    | name      | addr+suburb | geometry |
455             | N1  | amenity | cafe    | Bolder    | Boring      | 9        |
456             | N2  | amenity | cafe    | Leftside  | Boring      | 8        |
457         When importing
458         Then place_addressline contains
459            | object | address | isaddress |
460            | W1     | R1      | True      |
461            | W1     | R2      | False     |
462         And place_addressline doesn't contain
463            | object | address |
464            | N1     | R1      |
465            | N2     | R2      |
466         When sending search query "Bolder"
467         Then results contain
468            | osm | display_name            |
469            | N1  | Bolder, Wonderway, Left |
470         When sending search query "Leftside"
471         Then results contain
472            | osm | display_name               |
473            | N2  | Leftside, Wonderway, Right |
474
475
476
477     Scenario: POIs can correct address parts on the fly (with partial matching address)
478         Given the grid
479             | 1 |   |   |   |  2 |   | 5 |
480             |   |   |   | 9 |    | 8 |   |
481             |   | 10| 11|   |    | 12|   |
482             | 4 |   |   |   |  3 |   | 6 |
483         And the places
484             | osm | class    | type           | admin | name  | geometry    |
485             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
486             | R2  | boundary | administrative | 8     | Right | (2,3,6,5,2) |
487         And the places
488             | osm | class   | type    | name      | geometry |
489             | W1  | highway | primary | Wonderway | 10,11,12 |
490         And the places
491             | osm | class   | type    | name      | addr+state | geometry |
492             | N1  | amenity | cafe    | Bolder    | Left       | 9        |
493             | N2  | amenity | cafe    | Leftside  | Left       | 8        |
494         When importing
495         Then place_addressline contains
496            | object | address | isaddress |
497            | W1     | R1      | True      |
498            | W1     | R2      | False     |
499         And place_addressline doesn't contain
500            | object | address |
501            | N1     | R1      |
502            | N2     | R2      |
503         When sending search query "Bolder"
504         Then results contain
505            | osm | display_name            |
506            | N1  | Bolder, Wonderway, Left |
507         When sending search query "Leftside"
508         Then results contain
509            | osm | display_name               |
510            | N2  | Leftside, Wonderway, Left |
511
512
513     Scenario: addr:* tags always match the closer area
514         Given the grid
515             | 1 |   |   |   |  2 |   | 5 |
516             |   |   |   |   |    |   |   |
517             |   | 10| 11|   |    |   |   |
518             | 4 |   |   |   |  3 |   | 6 |
519         And the places
520             | osm | class    | type           | admin | name  | geometry    |
521             | R1  | boundary | administrative | 8     | Left  | (1,2,3,4,1) |
522             | R2  | boundary | administrative | 8     | Left  | (2,3,6,5,2) |
523         And the places
524             | osm | class   | type    | name      | addr+city | geometry |
525             | W1  | highway | primary | Wonderway | Left      | 10,11    |
526         When importing
527         Then place_addressline doesn't contain
528             | object | address |
529             | W1     | R2      |
530