Files
Nominatim/test/bdd/osm2pgsql/import/custom_style.feature
Sarah Hoffmann 59bce26afe convert import styles to themepark
Introduces presets which avoid much of the previous configuration
duplication. The original import files are now thin wrappers around
the themepark themes.
2024-12-16 10:26:55 +01:00

320 lines
11 KiB
Gherkin

@DB
Feature: Import with custom styles by osm2pgsql
Tests for the example customizations given in the documentation.
Scenario: Custom main tags (set new ones)
Given the lua style file
"""
local flex = require('import-full')
flex.set_main_tags{
boundary = {administrative = 'named'},
highway = {'always', street_lamp = 'named'},
landuse = 'fallback'
}
"""
When loading osm data
"""
n10 Tboundary=administrative x0 y0
n11 Tboundary=administrative,name=Foo x0 y0
n12 Tboundary=electoral x0 y0
n13 Thighway=primary x0 y0
n14 Thighway=street_lamp x0 y0
n15 Thighway=primary,landuse=street x0 y0
"""
Then place contains exactly
| object | class | type |
| N11 | boundary | administrative |
| N13 | highway | primary |
| N15 | highway | primary |
Scenario: Custom main tags (modify existing)
Given the lua style file
"""
local flex = require('import-full')
flex.modify_main_tags{
amenity = {prison = 'delete'},
highway = {stop = 'named'},
aeroway = 'named'
}
"""
When loading osm data
"""
n10 Tamenity=hotel x0 y0
n11 Tamenity=prison x0 y0
n12 Thighway=stop x0 y0
n13 Thighway=stop,name=BigStop x0 y0
n14 Thighway=give_way x0 y0
n15 Thighway=bus_stop x0 y0
n16 Taeroway=no,name=foo x0 y0
n17 Taeroway=taxiway,name=D15 x0 y0
"""
Then place contains exactly
| object | class | type |
| N10 | amenity | hotel |
| N13 | highway | stop |
| N15 | highway | bus_stop |
| N17 | aeroway | taxiway |
Scenario: Prefiltering tags
Given the lua style file
"""
local flex = require('import-full')
flex.set_prefilters{
delete_keys = {'source', 'source:*'},
extra_tags = {amenity = {'yes', 'no'}}
}
flex.set_main_tags{
amenity = 'always',
tourism = 'always'
}
"""
When loading osm data
"""
n1 Tamenity=yes x0 y6
n2 Tamenity=hospital,source=survey x3 y6
n3 Ttourism=hotel,amenity=yes x0 y0
n4 Ttourism=hotel,amenity=telephone x0 y0
"""
Then place contains exactly
| object | extratags |
| N2:amenity | - |
| N3:tourism | 'amenity': 'yes' |
| N4:tourism | - |
| N4:amenity | - |
Scenario: Ignore some tags
Given the lua style file
"""
local flex = require('import-extratags')
flex.ignore_keys{'ref:*', 'surface'}
"""
When loading osm data
"""
n100 Thighway=residential,ref=34,ref:bodo=34,surface=gray,extra=1 x0 y0
"""
Then place contains exactly
| object | name | extratags |
| N100 | 'ref' : '34' | 'extra': '1' |
Scenario: Add for extratags
Given the lua style file
"""
local flex = require('import-full')
flex.add_for_extratags{'ref:*', 'surface'}
"""
When loading osm data
"""
n100 Thighway=residential,ref=34,ref:bodo=34,surface=gray,extra=1 x0 y0
"""
Then place contains exactly
| object | name | extratags |
| N100 | 'ref' : '34' | 'ref:bodo': '34', 'surface': 'gray' |
Scenario: Name tags
Given the lua style file
"""
local flex = require('flex-base')
flex.set_main_tags{highway = {traffic_light = 'named'}}
flex.set_name_tags{main = {'name', 'name:*'},
extra = {'ref'}
}
"""
When loading osm data
"""
n1 Thighway=stop,name=Something x0 y0
n2 Thighway=traffic_light,ref=453-4 x0 y0
n3 Thighway=traffic_light,name=Greens x0 y0
n4 Thighway=traffic_light,name=Red,ref=45 x0 y0
"""
Then place contains exactly
| object | name |
| N3:highway | 'name': 'Greens' |
| N4:highway | 'name': 'Red', 'ref': '45' |
Scenario: Modify name tags
Given the lua style file
"""
local flex = require('import-full')
flex.modify_name_tags{house = {}, extra = {'o'}}
"""
When loading osm data
"""
n1 Ttourism=hotel,ref=45,o=good
n2 Taddr:housename=Old,addr:street=Away
"""
Then place contains exactly
| object | name |
| N1:tourism | 'o': 'good' |
Scenario: Address tags
Given the lua style file
"""
local flex = require('import-full')
flex.set_address_tags{
main = {'addr:housenumber'},
extra = {'addr:*'},
postcode = {'postal_code', 'postcode', 'addr:postcode'},
country = {'country-code', 'ISO3166-1'}
}
"""
When loading osm data
"""
n1 Ttourism=hotel,addr:street=Foo x0 y0
n2 Taddr:housenumber=23,addr:street=Budd,postal_code=5567 x0 y0
n3 Taddr:street=None,addr:city=Where x0 y0
"""
Then place contains exactly
| object | type | address |
| N1:tourism | hotel | 'street': 'Foo' |
| N2:place | house | 'housenumber': '23', 'street': 'Budd', 'postcode': '5567' |
Scenario: Modify address tags
Given the lua style file
"""
local flex = require('import-full')
flex.set_address_tags{
extra = {'addr:*'},
}
"""
When loading osm data
"""
n2 Taddr:housenumber=23,addr:street=Budd,is_in:city=Faraway,postal_code=5567 x0 y0
"""
Then place contains exactly
| object | type | address |
| N2:place | house | 'housenumber': '23', 'street': 'Budd', 'postcode': '5567' |
Scenario: Unused handling (delete)
Given the lua style file
"""
local flex = require('import-full')
flex.set_address_tags{
main = {'addr:housenumber'},
extra = {'addr:*', 'tiger:county'}
}
flex.set_unused_handling{delete_keys = {'tiger:*'}}
"""
When loading osm data
"""
n1 Ttourism=hotel,tiger:county=Fargo x0 y0
n2 Ttourism=hotel,tiger:xxd=56,else=other x0 y0
"""
Then place contains exactly
| object | type | address | extratags |
| N1:tourism | hotel | 'tiger:county': 'Fargo' | - |
| N2:tourism | hotel | - | 'else': 'other' |
Scenario: Unused handling (extra)
Given the lua style file
"""
local flex = require('flex-base')
flex.set_main_tags{highway = 'always',
wikipedia = 'extra'}
flex.add_for_extratags{'wikipedia:*', 'wikidata'}
flex.set_unused_handling{extra_keys = {'surface'}}
"""
When loading osm data
"""
n100 Thighway=path,foo=bar,wikipedia=en:Path x0 y0
n234 Thighway=path,surface=rough x0 y0
n445 Thighway=path,name=something x0 y0
n446 Thighway=path,wikipedia:en=Path,wikidata=Q23 x0 y0
n567 Thighway=path,surface=dirt,wikipedia:en=Path x0 y0
"""
Then place contains exactly
| object | type | extratags |
| N100:highway | path | 'wikipedia': 'en:Path' |
| N234:highway | path | 'surface': 'rough' |
| N445:highway | path | - |
| N446:highway | path | 'wikipedia:en': 'Path', 'wikidata': 'Q23' |
| N567:highway | path | 'surface': 'dirt', 'wikipedia:en': 'Path' |
Scenario: Additional relation types
Given the lua style file
"""
local flex = require('import-full')
flex.RELATION_TYPES['site'] = flex.relation_as_multipolygon
"""
And the grid
| 1 | 2 |
| 4 | 3 |
When loading osm data
"""
n1
n2
n3
n4
w1 Nn1,n2,n3,n4,n1
r1 Ttype=multipolygon,amenity=school Mw1@
r2 Ttype=site,amenity=school Mw1@
"""
Then place contains exactly
| object | type |
| R1:amenity | school |
| R2:amenity | school |
Scenario: Exclude country relations
Given the lua style file
"""
local flex = require('import-full')
function osm2pgsql.process_relation(object)
if object.tags.boundary ~= 'administrative' or object.tags.admin_level ~= '2' then
flex.process_relation(object)
end
end
"""
And the grid
| 1 | 2 |
| 4 | 3 |
When loading osm data
"""
n1
n2
n3
n4
w1 Nn1,n2,n3,n4,n1
r1 Ttype=multipolygon,boundary=administrative,admin_level=4,name=Small Mw1@
r2 Ttype=multipolygon,boundary=administrative,admin_level=2,name=Big Mw1@
"""
Then place contains exactly
| object | type |
| R1:boundary | administrative |
Scenario: Customize processing functions
Given the lua style file
"""
local flex = require('import-full')
local original_process_tags = flex.process_tags
function flex.process_tags(o)
if o.object.tags.highway ~= nil and o.object.tags.access == 'no' then
return
end
original_process_tags(o)
end
"""
When loading osm data
"""
n1 Thighway=residential x0 y0
n2 Thighway=residential,access=no x0 y0
"""
Then place contains exactly
| object | type |
| N1:highway | residential |