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