]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/osm2pgsql/import/tags.feature
2e44e145ccdaf6a07c3593d2224d62400cd00366
[nominatim.git] / test / bdd / osm2pgsql / import / tags.feature
1 @DB
2 Feature: Tag evaluation
3     Tests if tags are correctly imported into the place table
4
5     Scenario Outline: Name tags
6        When loading osm data
7          """
8          n1 Thighway=yes,<nametag>=Foo
9          """
10        Then place contains
11          | object | name |
12          | N1     | '<nametag>' : 'Foo' |
13
14     Examples:
15      | nametag |
16      | ref |
17      | int_ref |
18      | nat_ref |
19      | reg_ref |
20      | loc_ref |
21      | old_ref |
22      | iata |
23      | icao |
24      | pcode:1 |
25      | pcode:2 |
26      | pcode:3 |
27      | name |
28      | name:de |
29      | name:bt-BR |
30      | int_name |
31      | int_name:xxx |
32      | nat_name |
33      | nat_name:fr |
34      | reg_name |
35      | reg_name:1 |
36      | loc_name |
37      | loc_name:DE |
38      | old_name |
39      | old_name:v1 |
40      | alt_name |
41      | alt_name:dfe |
42      | alt_name_1 |
43      | official_name |
44      | short_name |
45      | short_name:CH |
46      | addr:housename |
47      | brand |
48
49     Scenario: operator only for shops and amenities
50         When loading osm data
51          """
52          n1 Thighway=yes,operator=Foo,name=null
53          n2 Tshop=grocery,operator=Foo
54          n3 Tamenity=restaurant,operator=Foo
55          n4 Ttourism=hotel,operator=Foo
56          n5 Tamenity=hospital,operator=Foo,name=Meme
57          n6 Tamenity=fuel,operator=Foo
58          """
59         Then place contains
60          | object | name |
61          | N1     | 'name' : 'null' |
62          | N2     | 'operator' : 'Foo' |
63          | N3     | 'operator' : 'Foo' |
64          | N4     | 'operator' : 'Foo' |
65          | N5     | 'name' : 'Meme' |
66          | N6     | 'operator' : 'Foo' |
67
68     Scenario Outline: Ignored name tags
69         When loading osm data
70          """
71          n1 Thighway=yes,<nametag>=Foo,name=real
72          """
73         Then place contains
74          | object | name |
75          | N1     | 'name' : 'real' |
76
77     Examples:
78      | nametag |
79      | name_de |
80      | Name |
81      | ref:de |
82      | ref_de |
83      | my:ref |
84      | br:name |
85      | name:prefix |
86      | name:source |
87
88     Scenario: Special character in name tag
89         When loading osm data
90          """
91          n1 Thighway=yes,name:%20%de=Foo,name=real1
92          n2 Thighway=yes,name:%a%de=Foo,name=real2
93          n3 Thighway=yes,name:%9%de=Foo,name:\\=real3
94          n4 Thighway=yes,name:%9%de=Foo,name=rea\l3
95          """
96         Then place contains
97          | object | name |
98          | N1     | 'name: de' : 'Foo', 'name' : 'real1' |
99          | N2     | 'name: de' : 'Foo', 'name' : 'real2' |
100          | N3     | 'name: de' : 'Foo', 'name:\\\\' : 'real3' |
101          | N4     | 'name: de' : 'Foo', 'name' : 'rea\\l3' |
102
103     Scenario: Unprintable character in address tag are maintained
104         When loading osm data
105          """
106          n23 Tamenity=yes,name=foo,addr:postcode=1234%200e%
107          """
108         Then place contains
109          | object | address |
110          | N23    | 'postcode' : u'1234\u200e' |
111
112     Scenario Outline: Included places
113         When loading osm data
114          """
115          n1 T<key>=<value>,name=real
116          """
117         Then place contains
118          | object | class | type    | name |
119          | N1     | <key> | <value> | 'name' : 'real' |
120
121     Examples:
122      | key       | value |
123      | emergency | phone |
124      | tourism   | information |
125      | historic  | castle |
126      | military  | barracks |
127      | natural   | water |
128      | highway   | residential |
129      | aerialway | station |
130      | aeroway   | way |
131      | boundary  | administrative |
132      | craft     | butcher |
133      | leisure   | playground |
134      | office    | bookmaker |
135      | railway   | rail |
136      | shop      | bookshop |
137      | waterway  | stream |
138      | landuse   | cemetry |
139      | man_made  | tower |
140      | mountain_pass | yes |
141
142     Scenario Outline: Bridges and Tunnels take special name tags
143         When loading osm data
144          """
145          n1 Thighway=road,<key>=yes,name=Rd,<key>:name=My
146          n2 Thighway=road,<key>=yes,name=Rd
147          """
148         Then place contains
149           | object     | type | name |
150           | N1:highway | road | 'name' : 'Rd' |
151           | N1:<key>   | yes  | 'name' : 'My' |
152           | N2:highway | road | 'name' : 'Rd' |
153         And place has no entry for N2:<key>
154
155     Examples:
156       | key |
157       | bridge |
158       | tunnel |
159
160     Scenario Outline: Excluded places
161         When loading osm data
162          """
163          n1 T<key>=<value>,name=real
164          n2 Thighway=motorway,name=To%20%Hell
165          """
166         Then place has no entry for N1
167
168     Examples:
169      | key       | value |
170      | emergency | yes |
171      | emergency | no |
172      | tourism   | yes |
173      | tourism   | no |
174      | historic  | yes |
175      | historic  | no |
176      | military  | yes |
177      | military  | no |
178      | natural   | yes |
179      | natural   | no |
180      | highway   | no |
181      | highway   | turning_circle |
182      | highway   | mini_roundabout |
183      | highway   | noexit |
184      | highway   | crossing |
185      | aerialway | no |
186      | aerialway | pylon |
187      | man_made  | survey_point |
188      | man_made  | cutline |
189      | aeroway   | no |
190      | amenity   | no |
191      | bridge    | no |
192      | craft     | no |
193      | leisure   | no |
194      | office    | no |
195      | railway   | no |
196      | railway   | level_crossing |
197      | shop      | no |
198      | tunnel    | no |
199      | waterway  | riverbank |
200
201     Scenario Outline: Some tags only are included when named
202         When loading osm data
203         """
204         n1 T<key>=<value>
205         n2 T<key>=<value>,name=To%20%Hell
206         n3 T<key>=<value>,ref=123
207         """
208         Then place contains exactly
209          | object | class | type |
210          | N2     | <key> | <value> |
211
212     Examples:
213       | key      | value |
214       | landuse  | residential |
215       | natural  | meadow |
216       | highway  | traffic_signals |
217       | highway  | service |
218       | highway  | cycleway |
219       | highway  | path |
220       | highway  | footway |
221       | highway  | steps |
222       | highway  | bridleway |
223       | highway  | track |
224       | highway  | byway |
225       | highway  | motorway_link |
226       | highway  | primary_link |
227       | highway  | trunk_link |
228       | highway  | secondary_link |
229       | highway  | tertiary_link |
230       | railway  | rail |
231       | boundary | administrative |
232       | waterway | stream |
233
234     Scenario: Footways are not included if they are sidewalks
235         When loading osm data
236           """
237           n2 Thighway=footway,name=To%20%Hell,footway=sidewalk
238           n23 Thighway=footway,name=x
239           """
240         Then place has no entry for N2
241
242     Scenario: named junctions are included if there is no other tag
243         When loading osm data
244           """
245           n1 Tjunction=yes
246           n2 Thighway=secondary,junction=roundabout,name=To-Hell
247           n3 Tjunction=yes,name=Le%20%Croix
248           """
249         Then place has no entry for N1
250         And place has no entry for N2:junction
251         And place contains
252          | object | class    | type |
253          | N3     | junction | yes |
254
255     Scenario: Boundary with place tag
256         When loading osm data
257           """
258           n200 x0 y0
259           n201 x0 y1
260           n202 x1 y1
261           n203 x1 y0
262           w2 Tboundary=administrative,place=city,name=Foo Nn200,n201,n202,n203,n200
263           w4 Tboundary=administrative,place=island,name=Foo Nn200,n201,n202,n203,n200
264           w20 Tplace=city,name=ngng Nn200,n201,n202,n203,n200
265           w40 Tplace=city,boundary=statistical,name=BB Nn200,n201,n202,n203,n200
266           """
267         Then place contains
268           | object       | class    | extratags        | type |
269           | W2           | boundary | 'place' : 'city' | administrative |
270           | W4:boundary  | boundary | -                | administrative |
271           | W4:place     | place    | -                | island |
272           | W20          | place    | -                | city |
273           | W40:boundary | boundary | -                | statistical |
274           | W40:place    | place    | -                | city |
275         And place has no entry for W2:place
276
277     Scenario Outline: Tags that describe a house
278         When loading osm data
279           """
280           n100 T<key>=<value>
281           n999 Tamenity=prison,<key>=<value>
282           """
283         Then place contains exactly
284           | object | class   | type |
285           | N100   | place   | house |
286           | N999   | amenity | prison |
287
288     Examples:
289       | key                     | value |
290       | addr:housename          | My%20%Mansion |
291       | addr:housenumber        | 456 |
292       | addr:conscriptionnumber | 4 |
293       | addr:streetnumber       | 4568765 |
294
295     Scenario: Only named with no other interesting tag
296         When loading osm data
297           """
298           n1 Tlanduse=meadow
299           n2 Tlanduse=residential,name=important
300           n3 Tlanduse=residential,name=important,place=hamlet
301           """
302         Then place contains
303           | object | class   | type |
304           | N2     | landuse | residential |
305           | N3     | place   | hamlet |
306         And place has no entry for N1
307         And place has no entry for N3:landuse
308
309     Scenario Outline: Import of postal codes
310         When loading osm data
311           """
312           n10 Thighway=secondary,<key>=<value>
313           n11 T<key>=<value>
314           """
315         Then place contains
316           | object | class   | type      | addr+postcode |
317           | N10    | highway | secondary | <value> |
318           | N11    | place   | postcode  | <value> |
319         And place has no entry for N10:place
320
321     Examples:
322       | key                 | value |
323       | postal_code         | 45736 |
324       | postcode            | xxx |
325       | addr:postcode    | 564 |
326       | tiger:zip_left   | 00011 |
327       | tiger:zip_right  | 09123 |
328
329     Scenario: Import of street and place
330         When loading osm data
331           """
332           n10 Tamenity=hospital,addr:street=Foo%20%St
333           n20 Tamenity=hospital,addr:place=Foo%20%Town
334           """
335         Then place contains
336           | object | class   | type     | addr+street | addr+place |
337           | N10    | amenity | hospital | Foo St      | -        |
338           | N20    | amenity | hospital | -           | Foo Town |
339
340
341     Scenario Outline: Import of country
342         When loading osm data
343           """
344           n10 Tplace=village,<key>=<value>
345           """
346         Then place contains
347           | object | class   | type    | addr+country |
348           | N10    | place   | village | <value> |
349
350     Examples:
351         | key                  | value |
352         | country_code         | us |
353         | ISO3166-1            | XX |
354         | is_in:country_code   | __ |
355         | addr:country         | .. |
356         | addr:country_code    | cv |
357
358     Scenario Outline: Ignore country codes with wrong length
359         When loading osm data
360           """
361           n10 Tplace=village,country_code=<value>
362           """
363         Then place contains
364           | object | class   | type    | addr+country |
365           | N10    | place   | village | - |
366
367     Examples:
368         | value |
369         | X |
370         | x |
371         | ger |
372         | dkeufr |
373         | d%20%e |
374
375     Scenario: Import of house numbers
376         When loading osm data
377           """
378           n10 Tbuilding=yes,addr:housenumber=4b
379           n11 Tbuilding=yes,addr:conscriptionnumber=003
380           n12 Tbuilding=yes,addr:streetnumber=2345
381           n13 Tbuilding=yes,addr:conscriptionnumber=3,addr:streetnumber=111
382           """
383         Then place contains
384           | object | class | type    | address |
385           | N10    | building | yes  | 'housenumber' : '4b' |
386           | N11    | building | yes  | 'conscriptionnumber' : '003' |
387           | N12    | building | yes  | 'streetnumber' : '2345' |
388           | N13    | building | yes  | 'conscriptionnumber' : '3', 'streetnumber' : '111' |
389
390     Scenario: Shorten tiger:county tags
391         When loading osm data
392           """
393           n10 Tplace=village,tiger:county=Feebourgh%2c%%20%AL
394           n11 Tplace=village,addr:state=Alabama,tiger:county=Feebourgh%2c%%20%AL
395           n12 Tplace=village,tiger:county=Feebourgh
396           """
397         Then place contains
398           | object | class   | type    | addr+tiger:county |
399           | N10    | place   | village | Feebourgh county |
400           | N11    | place   | village | Feebourgh county |
401           | N12    | place   | village | Feebourgh county |
402
403     Scenario Outline: Import of address tags
404         When loading osm data
405           """
406           n10 Tplace=village,addr:<key>=<value>
407           n11 Tplace=village,is_in:<key>=<value>
408           """
409         Then place contains
410           | object | class   | type    | address |
411           | N10    | place   | village | '<key>' : '<value>' |
412
413     Examples:
414       | key       | value |
415       | suburb    | hinein |
416       | city      | Sydney |
417       | state     | Jura |
418
419     Scenario: Import of isin tags with space
420         When loading osm data
421           """
422           n10 Tplace=village,is_in=Stockholm%2c%%20%Sweden
423           n11 Tplace=village,addr:county=le%20%havre
424           """
425         Then place contains
426           | object | class   | type    | address |
427           | N10    | place   | village | 'is_in' : 'Stockholm, Sweden' |
428           | N11    | place   | village | 'county' : 'le havre' |
429
430     Scenario: Import of admin level
431         When loading osm data
432           """
433           n10 Tamenity=hospital,admin_level=3
434           n11 Tamenity=hospital,admin_level=b
435           n12 Tamenity=hospital
436           n13 Tamenity=hospital,admin_level=3.0
437           """
438         Then place contains
439           | object | class   | type     | admin_level |
440           | N10    | amenity | hospital | 3 |
441           | N11    | amenity | hospital | 15 |
442           | N12    | amenity | hospital | 15 |
443           | N13    | amenity | hospital | 3 |
444
445     Scenario Outline: Import of extra tags
446         When loading osm data
447           """
448           n10 Ttourism=hotel,<key>=foo
449           """
450         Then place contains
451           | object | class   | type  | extratags |
452           | N10    | tourism | hotel | '<key>' : 'foo' |
453
454      Examples:
455        | key |
456        | tracktype |
457        | traffic_calming |
458        | service |
459        | cuisine |
460        | capital |
461        | dispensing |
462        | religion |
463        | denomination |
464        | sport |
465        | internet_access |
466        | lanes |
467        | surface |
468        | smoothness |
469        | width |
470        | est_width |
471        | incline |
472        | opening_hours |
473        | collection_times |
474        | service_times |
475        | disused |
476        | wheelchair |
477        | sac_scale |
478        | trail_visibility |
479        | mtb:scale |
480        | mtb:description |
481        | wood |
482        | drive_in |
483        | access |
484        | vehicle |
485        | bicyle |
486        | foot |
487        | goods |
488        | hgv |
489        | motor_vehicle |
490        | motor_car |
491        | access:foot |
492        | contact:phone |
493        | drink:mate |
494        | oneway |
495        | date_on |
496        | date_off |
497        | day_on |
498        | day_off |
499        | hour_on |
500        | hour_off |
501        | maxweight |
502        | maxheight |
503        | maxspeed |
504        | disused |
505        | toll |
506        | charge |
507        | population |
508        | description |
509        | image |
510        | attribution |
511        | fax |
512        | email |
513        | url |
514        | website |
515        | phone |
516        | real_ale |
517        | smoking |
518        | food |
519        | camera |
520        | brewery |
521        | locality |
522        | wikipedia |
523        | wikipedia:de |
524        | wikidata |
525        | name:prefix |
526        | name:botanical |
527        | name:etymology:wikidata |
528
529     Scenario: buildings
530         When loading osm data
531           """
532           n10 Ttourism=hotel,building=yes
533           n11 Tbuilding=house
534           n12 Tbuilding=shed,addr:housenumber=1
535           n13 Tbuilding=yes,name=Das-Haus
536           n14 Tbuilding=yes,addr:postcode=12345
537           """
538         Then place contains
539           | object | class   | type |
540           | N10    | tourism | hotel |
541           | N12    | building| yes |
542           | N13    | building| yes |
543           | N14    | building| yes |
544         And place has no entry for N10:building
545         And place has no entry for N11
546
547     Scenario: complete node entry
548         When loading osm data
549           """
550           n290393920 Taddr:city=Perpignan,addr:country=FR,addr:housenumber=43\,addr:postcode=66000,addr:street=Rue%20%Pierre%20%Constant%20%d`Ivry,source=cadastre-dgi-fr%20%source%20%:%20%Direction%20%Générale%20%des%20%Impôts%20%-%20%Cadastre%20%;%20%mise%20%à%20%jour%20%:2008
551           """
552         Then place contains
553          | object     | class   | type | address |
554          | N290393920 | place   | house| 'city' : 'Perpignan', 'country' : 'FR', 'housenumber' : '43\\', 'postcode' : '66000', 'street' : 'Rue Pierre Constant d`Ivry' |