2 Feature: Parenting of objects
3 Tests that the correct parent is choosen
5 Scenario: Address inherits postcode from its street unless it has a postcode
6 Given the scene roads-with-pois
8 | osm_id | class | type | housenumber | geometry
9 | 1 | place | house | 4 | :p-N1
11 | osm_id | class | type | housenumber | postcode | geometry
12 | 2 | place | house | 5 | 99999 | :p-N1
14 | osm_id | class | type | name | postcode | geometry
15 | 1 | highway | residential | galoo | 12345 | :w-north
17 Then table placex contains
18 | object | parent_place_id
21 When sending query "4 galoo"
23 | ID | osm_type | osm_id | langaddress
24 | 0 | N | 1 | 4, galoo, 12345
25 When sending query "5 galoo"
27 | ID | osm_type | osm_id | langaddress
28 | 0 | N | 2 | 5, galoo, 99999
31 Scenario: Address without tags, closest street
32 Given the scene roads-with-pois
34 | osm_id | class | type | geometry
35 | 1 | place | house | :p-N1
36 | 2 | place | house | :p-N2
37 | 3 | place | house | :p-S1
38 | 4 | place | house | :p-S2
39 And the named place ways
40 | osm_id | class | type | geometry
41 | 1 | highway | residential | :w-north
42 | 2 | highway | residential | :w-south
44 Then table placex contains
45 | object | parent_place_id
51 Scenario: Address without tags avoids unnamed streets
52 Given the scene roads-with-pois
54 | osm_id | class | type | geometry
55 | 1 | place | house | :p-N1
56 | 2 | place | house | :p-N2
57 | 3 | place | house | :p-S1
58 | 4 | place | house | :p-S2
60 | osm_id | class | type | geometry
61 | 1 | highway | residential | :w-north
62 And the named place ways
63 | osm_id | class | type | geometry
64 | 2 | highway | residential | :w-south
66 Then table placex contains
67 | object | parent_place_id
73 Scenario: addr:street tag parents to appropriately named street
74 Given the scene roads-with-pois
76 | osm_id | class | type | street| geometry
77 | 1 | place | house | south | :p-N1
78 | 2 | place | house | north | :p-N2
79 | 3 | place | house | south | :p-S1
80 | 4 | place | house | north | :p-S2
82 | osm_id | class | type | name | geometry
83 | 1 | highway | residential | north | :w-north
84 | 2 | highway | residential | south | :w-south
86 Then table placex contains
87 | object | parent_place_id
93 Scenario: addr:street tag parents to next named street
94 Given the scene roads-with-pois
96 | osm_id | class | type | street | geometry
97 | 1 | place | house | abcdef | :p-N1
98 | 2 | place | house | abcdef | :p-N2
99 | 3 | place | house | abcdef | :p-S1
100 | 4 | place | house | abcdef | :p-S2
102 | osm_id | class | type | name | geometry
103 | 1 | highway | residential | abcdef | :w-north
104 | 2 | highway | residential | abcdef | :w-south
106 Then table placex contains
107 | object | parent_place_id
113 Scenario: addr:street tag without appropriately named street
114 Given the scene roads-with-pois
116 | osm_id | class | type | street | geometry
117 | 1 | place | house | abcdef | :p-N1
118 | 2 | place | house | abcdef | :p-N2
119 | 3 | place | house | abcdef | :p-S1
120 | 4 | place | house | abcdef | :p-S2
122 | osm_id | class | type | name | geometry
123 | 1 | highway | residential | abcde | :w-north
124 | 2 | highway | residential | abcde | :w-south
126 Then table placex contains
127 | object | parent_place_id
133 Scenario: addr:place address
134 Given the scene road-with-alley
136 | osm_id | class | type | addr_place | geometry
137 | 1 | place | house | myhamlet | :n-alley
139 | osm_id | class | type | name | geometry
140 | 2 | place | hamlet | myhamlet | :n-main-west
142 | osm_id | class | type | name | geometry
143 | 1 | highway | residential | myhamlet | :w-main
145 Then table placex contains
146 | object | parent_place_id
149 Scenario: addr:street is preferred over addr:place
150 Given the scene road-with-alley
152 | osm_id | class | type | addr_place | street | geometry
153 | 1 | place | house | myhamlet | mystreet| :n-alley
155 | osm_id | class | type | name | geometry
156 | 2 | place | hamlet | myhamlet | :n-main-west
158 | osm_id | class | type | name | geometry
159 | 1 | highway | residential | mystreet | :w-main
161 Then table placex contains
162 | object | parent_place_id
165 Scenario: Untagged address in simple associated street relation
166 Given the scene road-with-alley
168 | osm_id | class | type | geometry
169 | 1 | place | house | :n-alley
170 | 2 | place | house | :n-corner
171 | 3 | place | house | :n-main-west
173 | osm_id | class | type | name | geometry
174 | 1 | highway | residential | foo | :w-main
175 | 2 | highway | service | bar | :w-alley
177 | id | members | tags
178 | 1 | W1:street,N1,N2,N3 | 'type' : 'associatedStreet'
180 Then table placex contains
181 | object | parent_place_id
186 Scenario: Avoid unnamed streets in simple associated street relation
187 Given the scene road-with-alley
189 | osm_id | class | type | geometry
190 | 1 | place | house | :n-alley
191 | 2 | place | house | :n-corner
192 | 3 | place | house | :n-main-west
193 And the named place ways
194 | osm_id | class | type | geometry
195 | 1 | highway | residential | :w-main
197 | osm_id | class | type | geometry
198 | 2 | highway | residential | :w-alley
200 | id | members | tags
201 | 1 | N1,N2,N3,W2:street,W1:street | 'type' : 'associatedStreet'
203 Then table placex contains
204 | object | parent_place_id
210 Scenario: Associated street relation overrides addr:street
211 Given the scene road-with-alley
213 | osm_id | class | type | street | geometry
214 | 1 | place | house | bar | :n-alley
216 | osm_id | class | type | name | geometry
217 | 1 | highway | residential | foo | :w-main
218 | 2 | highway | residential | bar | :w-alley
220 | id | members | tags
221 | 1 | W1:street,N1,N2,N3 | 'type' : 'associatedStreet'
223 Then table placex contains
224 | object | parent_place_id
227 Scenario: Building without tags, closest street from center point
228 Given the scene building-on-street-corner
229 And the named place ways
230 | osm_id | class | type | geometry
231 | 1 | building | yes | :w-building
232 | 2 | highway | primary | :w-WE
233 | 3 | highway | residential | :w-NS
235 Then table placex contains
236 | object | parent_place_id
239 Scenario: Building with addr:street tags
240 Given the scene building-on-street-corner
241 And the named place ways
242 | osm_id | class | type | street | geometry
243 | 1 | building | yes | bar | :w-building
245 | osm_id | class | type | name | geometry
246 | 2 | highway | primary | bar | :w-WE
247 | 3 | highway | residential | foo | :w-NS
249 Then table placex contains
250 | object | parent_place_id
253 Scenario: Building with addr:place tags
254 Given the scene building-on-street-corner
256 | osm_id | class | type | name | geometry
257 | 1 | place | village | bar | :n-outer
258 And the named place ways
259 | osm_id | class | type | addr_place | geometry
260 | 1 | building | yes | bar | :w-building
262 | osm_id | class | type | name | geometry
263 | 2 | highway | primary | bar | :w-WE
264 | 3 | highway | residential | foo | :w-NS
266 Then table placex contains
267 | object | parent_place_id
270 Scenario: Building in associated street relation
271 Given the scene building-on-street-corner
272 And the named place ways
273 | osm_id | class | type | geometry
274 | 1 | building | yes | :w-building
276 | osm_id | class | type | name | geometry
277 | 2 | highway | primary | bar | :w-WE
278 | 3 | highway | residential | foo | :w-NS
280 | id | members | tags
281 | 1 | W1:house,W2:street | 'type' : 'associatedStreet'
283 Then table placex contains
284 | object | parent_place_id
287 Scenario: Building in associated street relation overrides addr:street
288 Given the scene building-on-street-corner
289 And the named place ways
290 | osm_id | class | type | street | geometry
291 | 1 | building | yes | foo | :w-building
293 | osm_id | class | type | name | geometry
294 | 2 | highway | primary | bar | :w-WE
295 | 3 | highway | residential | foo | :w-NS
297 | id | members | tags
298 | 1 | W1:house,W2:street | 'type' : 'associatedStreet'
300 Then table placex contains
301 | object | parent_place_id
304 Scenario: Wrong member in associated street relation is ignored
305 Given the scene building-on-street-corner
306 And the named place nodes
307 | osm_id | class | type | geometry
308 | 1 | place | house | :n-outer
309 And the named place ways
310 | osm_id | class | type | street | geometry
311 | 1 | building | yes | foo | :w-building
313 | osm_id | class | type | name | geometry
314 | 2 | highway | primary | bar | :w-WE
315 | 3 | highway | residential | foo | :w-NS
317 | id | members | tags
318 | 1 | N1:house,W1:street,W3:street | 'type' : 'associatedStreet'
320 Then table placex contains
321 | object | parent_place_id
324 Scenario: POIs in building inherit address
325 Given the scene building-on-street-corner
326 And the named place nodes
327 | osm_id | class | type | geometry
328 | 1 | amenity | bank | :n-inner
329 | 2 | shop | bakery | :n-edge-NS
330 | 3 | shop | supermarket| :n-edge-WE
332 | osm_id | class | type | street | addr_place | housenumber | geometry
333 | 1 | building | yes | foo | nowhere | 3 | :w-building
335 | osm_id | class | type | name | geometry
336 | 2 | highway | primary | bar | :w-WE
337 | 3 | highway | residential | foo | :w-NS
339 Then table placex contains
340 | object | parent_place_id | street | addr_place | housenumber
341 | W1 | W3 | foo | nowhere | 3
342 | N1 | W3 | foo | nowhere | 3
343 | N2 | W3 | foo | nowhere | 3
344 | N3 | W3 | foo | nowhere | 3
346 Scenario: POIs don't inherit from streets
347 Given the scene building-on-street-corner
348 And the named place nodes
349 | osm_id | class | type | geometry
350 | 1 | amenity | bank | :n-inner
352 | osm_id | class | type | street | addr_place | housenumber | geometry
353 | 1 | highway | path | foo | nowhere | 3 | :w-building
355 | osm_id | class | type | name | geometry
356 | 3 | highway | residential | foo | :w-NS
358 Then table placex contains
359 | object | parent_place_id | street | addr_place | housenumber
360 | N1 | W3 | None | None | None
362 Scenario: POIs with own address do not inherit building address
363 Given the scene building-on-street-corner
364 And the named place nodes
365 | osm_id | class | type | street | geometry
366 | 1 | amenity | bank | bar | :n-inner
367 And the named place nodes
368 | osm_id | class | type | housenumber | geometry
369 | 2 | shop | bakery | 4 | :n-edge-NS
370 And the named place nodes
371 | osm_id | class | type | addr_place | geometry
372 | 3 | shop | supermarket| nowhere | :n-edge-WE
374 | osm_id | class | type | name | geometry
375 | 4 | place | isolated_dwelling | theplace | :n-outer
377 | osm_id | class | type | addr_place | housenumber | geometry
378 | 1 | building | yes | theplace | 3 | :w-building
380 | osm_id | class | type | name | geometry
381 | 2 | highway | primary | bar | :w-WE
382 | 3 | highway | residential | foo | :w-NS
384 Then table placex contains
385 | object | parent_place_id | street | addr_place | housenumber
386 | W1 | N4 | None | theplace | 3
387 | N1 | W2 | bar | None | None
388 | N2 | W3 | None | None | 4
389 | N3 | W2 | None | nowhere | None
392 Scenario: POIs parent a road if and only if they are attached to it
393 Given the scene points-on-roads
394 And the named place nodes
395 | osm_id | class | type | street | geometry
396 | 1 | highway | bus_stop | North St | :n-SE
397 | 2 | highway | bus_stop | South St | :n-NW
398 | 3 | highway | bus_stop | North St | :n-S-unglued
399 | 4 | highway | bus_stop | South St | :n-N-unglued
401 | osm_id | class | type | name | geometry
402 | 1 | highway | secondary | North St | :w-north
403 | 2 | highway | unclassified | South St | :w-south
406 | 1 | 100,101,2,103,104
407 | 2 | 200,201,1,202,203
409 Then table placex contains
410 | object | parent_place_id
416 Scenario: POIs do not parent non-roads they are attached to
417 Given the scene points-on-roads
418 And the named place nodes
419 | osm_id | class | type | street | geometry
420 | 1 | highway | bus_stop | North St | :n-SE
421 | 2 | highway | bus_stop | South St | :n-NW
423 | osm_id | class | type | name | geometry
424 | 1 | landuse | residential | North St | :w-north
425 | 2 | waterway| river | South St | :w-south
428 | 1 | 100,101,2,103,104
429 | 2 | 200,201,1,202,203
431 Then table placex contains
432 | object | parent_place_id
436 Scenario: POIs on building outlines inherit associated street relation
437 Given the scene building-on-street-corner
438 And the named place nodes
439 | osm_id | class | type | geometry
440 | 1 | place | house | :n-edge-NS
441 And the named place ways
442 | osm_id | class | type | geometry
443 | 1 | building | yes | :w-building
445 | osm_id | class | type | name | geometry
446 | 2 | highway | primary | bar | :w-WE
447 | 3 | highway | residential | foo | :w-NS
449 | id | members | tags
450 | 1 | W1:house,W2:street | 'type' : 'associatedStreet'
453 | 1 | 100,1,101,102,100
455 Then table placex contains
456 | object | parent_place_id