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