mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 01:47:57 +00:00
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.
This commit is contained in:
@@ -4,6 +4,10 @@ local flex = require('themes/nominatim/init')
|
||||
function flex.load_topic(name, cfg)
|
||||
local topic_file = debug.getinfo(1, "S").source:sub(2):match("(.*/)") .. 'themes/nominatim/topics/'.. name .. '.lua'
|
||||
|
||||
if topic_file == nil then
|
||||
error('Cannot find topic: ' .. name)
|
||||
end
|
||||
|
||||
loadfile(topic_file)(nil, flex, cfg or {})
|
||||
end
|
||||
|
||||
|
||||
@@ -1,74 +1,6 @@
|
||||
-- This is just an alias for the Nominatim themepark address topic
|
||||
local flex = require('flex-base')
|
||||
|
||||
flex.set_main_tags{
|
||||
highway = {motorway = 'always',
|
||||
trunk = 'always',
|
||||
primary = 'always',
|
||||
secondary = 'always',
|
||||
tertiary = 'always',
|
||||
unclassified = 'always',
|
||||
residential = 'always',
|
||||
road = 'always',
|
||||
living_street = 'always',
|
||||
pedestrian = 'always',
|
||||
service = 'named',
|
||||
cycleway = 'named',
|
||||
path = 'named',
|
||||
footway = 'named',
|
||||
steps = 'named',
|
||||
bridleway = 'named',
|
||||
track = 'named',
|
||||
motorway_link = 'named',
|
||||
trunk_link = 'named',
|
||||
primary_link = 'named',
|
||||
secondary_link = 'named',
|
||||
tertiary_link = 'named'},
|
||||
boundary = {administrative = 'named',
|
||||
postal_code = 'always'},
|
||||
landuse = 'fallback',
|
||||
place = 'always'
|
||||
}
|
||||
|
||||
flex.set_prefilters{delete_keys = {'building', 'source',
|
||||
'source', '*source', 'type',
|
||||
'is_in:postcode', '*:wikidata', '*:wikipedia',
|
||||
'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical',
|
||||
'addr:street:name', 'addr:street:type'},
|
||||
delete_tags = {landuse = {'cemetry', 'no'},
|
||||
boundary = {'place'}},
|
||||
extra_keys = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital', 'area'}
|
||||
}
|
||||
|
||||
flex.set_name_tags{main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao', 'pcode', 'pcode:*', 'ISO3166-2'},
|
||||
house = {'addr:housename'}
|
||||
}
|
||||
|
||||
flex.set_address_tags{main = {'addr:housenumber',
|
||||
'addr:conscriptionnumber',
|
||||
'addr:streetnumber'},
|
||||
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||
'tiger:zip_left', 'tiger:zip_right'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'},
|
||||
interpolation = {'addr:interpolation'}
|
||||
}
|
||||
|
||||
|
||||
flex.set_unused_handling{extra_keys = {'place'}}
|
||||
flex.load_topic('address')
|
||||
|
||||
return flex
|
||||
|
||||
@@ -1,72 +1,6 @@
|
||||
-- This is just an alias for the Nominatim themepark admin topic
|
||||
local flex = require('flex-base')
|
||||
|
||||
flex.set_main_tags{
|
||||
boundary = {administrative = 'named'},
|
||||
landuse = {residential = 'fallback',
|
||||
farm = 'fallback',
|
||||
farmyard = 'fallback',
|
||||
industrial = 'fallback',
|
||||
commercial = 'fallback',
|
||||
allotments = 'fallback',
|
||||
retail = 'fallback'},
|
||||
place = {county = 'always',
|
||||
district = 'always',
|
||||
municipality = 'always',
|
||||
city = 'always',
|
||||
town = 'always',
|
||||
borough = 'always',
|
||||
village = 'always',
|
||||
suburb = 'always',
|
||||
hamlet = 'always',
|
||||
croft = 'always',
|
||||
subdivision = 'always',
|
||||
allotments = 'always',
|
||||
neighbourhood = 'always',
|
||||
quarter = 'always',
|
||||
isolated_dwelling = 'always',
|
||||
farm = 'always',
|
||||
city_block = 'always',
|
||||
mountain_pass = 'always',
|
||||
square = 'always',
|
||||
locality = 'always'}
|
||||
}
|
||||
|
||||
flex.set_prefilters{delete_keys = {'building', 'source', 'highway',
|
||||
'addr:housenumber', 'addr:street', 'addr:city',
|
||||
'addr:interpolation',
|
||||
'source', '*source', 'type',
|
||||
'is_in:postcode', '*:wikidata', '*:wikipedia',
|
||||
'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical',
|
||||
'addr:street:name', 'addr:street:type'},
|
||||
delete_tags = {landuse = {'cemetry', 'no'},
|
||||
boundary = {'place'}},
|
||||
extra_keys = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital'}
|
||||
}
|
||||
|
||||
flex.set_name_tags{main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao', 'pcode', 'pcode:*', 'ISO3166-2'}
|
||||
}
|
||||
|
||||
flex.set_address_tags{extra = {'addr:*', 'is_in:*'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'},
|
||||
postcode_fallback = false
|
||||
}
|
||||
|
||||
flex.set_unused_handling{extra_keys = {'place'}}
|
||||
flex.load_topic('admin')
|
||||
|
||||
return flex
|
||||
|
||||
@@ -1,126 +1,6 @@
|
||||
-- This is just an alias for the Nominatim themepark full topic
|
||||
local flex = require('flex-base')
|
||||
|
||||
flex.set_main_tags{
|
||||
building = 'fallback',
|
||||
emergency = 'always',
|
||||
healthcare = 'fallback',
|
||||
historic = 'always',
|
||||
military = 'always',
|
||||
natural = 'named',
|
||||
highway = {'always',
|
||||
street_lamp = 'named',
|
||||
traffic_signals = 'named',
|
||||
service = 'named',
|
||||
cycleway = 'named',
|
||||
path = 'named',
|
||||
footway = 'named',
|
||||
steps = 'named',
|
||||
bridleway = 'named',
|
||||
track = 'named',
|
||||
motorway_link = 'named',
|
||||
trunk_link = 'named',
|
||||
primary_link = 'named',
|
||||
secondary_link = 'named',
|
||||
tertiary_link = 'named'},
|
||||
railway = 'named',
|
||||
man_made = {'none',
|
||||
pier = 'always',
|
||||
tower = 'always',
|
||||
bridge = 'always',
|
||||
works = 'named',
|
||||
water_tower = 'always',
|
||||
dyke = 'named',
|
||||
adit = 'named',
|
||||
lighthouse = 'always',
|
||||
watermill = 'always',
|
||||
tunnel = 'always'},
|
||||
aerialway = 'always',
|
||||
boundary = {'named',
|
||||
postal_code = 'always'},
|
||||
aeroway = 'always',
|
||||
amenity = 'always',
|
||||
club = 'always',
|
||||
craft = 'always',
|
||||
junction = 'fallback',
|
||||
landuse = 'fallback',
|
||||
leisure = {'always',
|
||||
nature_reserve = 'fallback'},
|
||||
office = 'always',
|
||||
mountain_pass = 'always',
|
||||
shop = 'always',
|
||||
tourism = 'always',
|
||||
bridge = 'named_with_key',
|
||||
tunnel = 'named_with_key',
|
||||
waterway = 'named',
|
||||
place = 'always'
|
||||
}
|
||||
|
||||
flex.set_prefilters{delete_keys = {'note', 'note:*', 'source', '*source', 'attribution',
|
||||
'comment', 'fixme', 'FIXME', 'created_by', 'NHD:*',
|
||||
'nhd:*', 'gnis:*', 'geobase:*', 'KSJ2:*', 'yh:*',
|
||||
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
|
||||
'type', 'lacounty:*', 'ref:ruian:*', 'building:ruian:type',
|
||||
'ref:linz:*', 'is_in:postcode'},
|
||||
delete_tags = {emergency = {'yes', 'no', 'fire_hydrant'},
|
||||
historic = {'yes', 'no'},
|
||||
military = {'yes', 'no'},
|
||||
natural = {'yes', 'no', 'coastline'},
|
||||
highway = {'no', 'turning_circle', 'mini_roundabout',
|
||||
'noexit', 'crossing', 'give_way', 'stop'},
|
||||
railway = {'level_crossing', 'no', 'rail', 'switch',
|
||||
'abandoned', 'signal', 'buffer_stop', 'razed'},
|
||||
aerialway = {'pylon', 'no'},
|
||||
aeroway = {'no'},
|
||||
amenity = {'no', 'parking_space', 'parking_entrance',
|
||||
'waste_disposal', 'hunting_stand'},
|
||||
club = {'no'},
|
||||
craft = {'no'},
|
||||
leisure = {'no'},
|
||||
office = {'no'},
|
||||
mountain_pass = {'no'},
|
||||
shop = {'no'},
|
||||
tourism = {'yes', 'no'},
|
||||
bridge = {'no'},
|
||||
tunnel = {'no'},
|
||||
waterway = {'riverbank'},
|
||||
building = {'no'},
|
||||
boundary = {'place', 'land_area'}},
|
||||
extra_keys = {'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical',
|
||||
'wikidata', '*:wikidata',
|
||||
'*:wikipedia', 'brand:wikipedia:*',
|
||||
'addr:street:name', 'addr:street:type'}
|
||||
}
|
||||
|
||||
flex.set_name_tags{main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*', 'brand'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao', 'pcode', 'pcode:*', 'ISO3166-2'},
|
||||
house = {'addr:housename'}
|
||||
}
|
||||
|
||||
flex.set_address_tags{main = {'addr:housenumber',
|
||||
'addr:conscriptionnumber',
|
||||
'addr:streetnumber'},
|
||||
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||
'tiger:zip_left', 'tiger:zip_right'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'},
|
||||
interpolation = {'addr:interpolation'}
|
||||
}
|
||||
|
||||
|
||||
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||
flex.load_topic('full', {with_extratags = true})
|
||||
|
||||
return flex
|
||||
|
||||
@@ -1,126 +1,6 @@
|
||||
-- This is just an alias for the Nominatim themepark full topic
|
||||
local flex = require('flex-base')
|
||||
|
||||
flex.set_main_tags{
|
||||
building = 'fallback',
|
||||
emergency = 'always',
|
||||
healthcare = 'fallback',
|
||||
historic = 'always',
|
||||
military = 'always',
|
||||
natural = 'named',
|
||||
highway = {'always',
|
||||
street_lamp = 'named',
|
||||
traffic_signals = 'named',
|
||||
service = 'named',
|
||||
cycleway = 'named',
|
||||
path = 'named',
|
||||
footway = 'named',
|
||||
steps = 'named',
|
||||
bridleway = 'named',
|
||||
track = 'named',
|
||||
motorway_link = 'named',
|
||||
trunk_link = 'named',
|
||||
primary_link = 'named',
|
||||
secondary_link = 'named',
|
||||
tertiary_link = 'named'},
|
||||
railway = 'named',
|
||||
man_made = {'none',
|
||||
pier = 'always',
|
||||
tower = 'always',
|
||||
bridge = 'always',
|
||||
works = 'named',
|
||||
water_tower = 'always',
|
||||
dyke = 'named',
|
||||
adit = 'named',
|
||||
lighthouse = 'always',
|
||||
watermill = 'always',
|
||||
tunnel = 'always'},
|
||||
aerialway = 'always',
|
||||
boundary = {'named',
|
||||
postal_code = 'always'},
|
||||
aeroway = 'always',
|
||||
amenity = 'always',
|
||||
club = 'always',
|
||||
craft = 'always',
|
||||
junction = 'fallback',
|
||||
landuse = 'fallback',
|
||||
leisure = {'always',
|
||||
nature_reserve = 'fallback'},
|
||||
office = 'always',
|
||||
mountain_pass = 'always',
|
||||
shop = 'always',
|
||||
tourism = 'always',
|
||||
bridge = 'named_with_key',
|
||||
tunnel = 'named_with_key',
|
||||
waterway = 'named',
|
||||
place = 'always'
|
||||
}
|
||||
|
||||
flex.set_prefilters{delete_keys = {'note', 'note:*', 'source', '*source', 'attribution',
|
||||
'comment', 'fixme', 'FIXME', 'created_by', 'NHD:*',
|
||||
'nhd:*', 'gnis:*', 'geobase:*', 'KSJ2:*', 'yh:*',
|
||||
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
|
||||
'type', 'lacounty:*', 'ref:ruian:*', 'building:ruian:type',
|
||||
'ref:linz:*', 'is_in:postcode',
|
||||
'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical',
|
||||
'*:wikidata', '*:wikipedia', 'brand:wikipedia:*',
|
||||
'addr:street:name', 'addr:street:type'},
|
||||
delete_tags = {emergency = {'yes', 'no', 'fire_hydrant'},
|
||||
historic = {'yes', 'no'},
|
||||
military = {'yes', 'no'},
|
||||
natural = {'yes', 'no', 'coastline'},
|
||||
highway = {'no', 'turning_circle', 'mini_roundabout',
|
||||
'noexit', 'crossing', 'give_way', 'stop'},
|
||||
railway = {'level_crossing', 'no', 'rail', 'switch',
|
||||
'abandoned', 'signal', 'buffer_stop', 'razed'},
|
||||
aerialway = {'pylon', 'no'},
|
||||
aeroway = {'no'},
|
||||
amenity = {'no', 'parking_space', 'parking_entrance',
|
||||
'waste_disposal', 'hunting_stand'},
|
||||
club = {'no'},
|
||||
craft = {'no'},
|
||||
leisure = {'no'},
|
||||
office = {'no'},
|
||||
mountain_pass = {'no'},
|
||||
shop = {'no'},
|
||||
tourism = {'yes', 'no'},
|
||||
bridge = {'no'},
|
||||
tunnel = {'no'},
|
||||
waterway = {'riverbank'},
|
||||
building = {'no'},
|
||||
boundary = {'place', 'land_area'}},
|
||||
extra_keys = {'wikidata', 'wikipedia', 'wikipedia:*'}
|
||||
}
|
||||
|
||||
flex.set_name_tags{main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*', 'brand'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao', 'pcode', 'pcode:*', 'ISO3166-2'},
|
||||
house = {'addr:housename'}
|
||||
}
|
||||
|
||||
flex.set_address_tags{main = {'addr:housenumber',
|
||||
'addr:conscriptionnumber',
|
||||
'addr:streetnumber'},
|
||||
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||
'tiger:zip_left', 'tiger:zip_right'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'},
|
||||
interpolation = {'addr:interpolation'}
|
||||
}
|
||||
|
||||
|
||||
flex.set_unused_handling{extra_keys = {'place'}}
|
||||
flex.load_topic('full')
|
||||
|
||||
return flex
|
||||
|
||||
@@ -1,74 +1,6 @@
|
||||
-- This is just an alias for the Nominatim themepark street topic
|
||||
local flex = require('flex-base')
|
||||
|
||||
flex.set_main_tags{
|
||||
highway = {motorway = 'always',
|
||||
trunk = 'always',
|
||||
primary = 'always',
|
||||
secondary = 'always',
|
||||
tertiary = 'always',
|
||||
unclassified = 'always',
|
||||
residential = 'always',
|
||||
road = 'always',
|
||||
living_street = 'always',
|
||||
pedestrian = 'always',
|
||||
service = 'named',
|
||||
cycleway = 'named',
|
||||
path = 'named',
|
||||
footway = 'named',
|
||||
steps = 'named',
|
||||
bridleway = 'named',
|
||||
track = 'named',
|
||||
motorway_link = 'named',
|
||||
trunk_link = 'named',
|
||||
primary_link = 'named',
|
||||
secondary_link = 'named',
|
||||
tertiary_link = 'named'},
|
||||
boundary = {administrative = 'named',
|
||||
postal_code = 'always'},
|
||||
landuse = 'fallback',
|
||||
place = 'always'
|
||||
}
|
||||
|
||||
flex.set_prefilters{delete_keys = {'building', 'source',
|
||||
'addr:housenumber', 'addr:street',
|
||||
'source', '*source', 'type',
|
||||
'is_in:postcode', '*:wikidata', '*:wikipedia',
|
||||
'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical',
|
||||
'addr:street:name', 'addr:street:type'},
|
||||
delete_tags = {landuse = {'cemetry', 'no'},
|
||||
boundary = {'place'}},
|
||||
extra_keys = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital', 'area'}
|
||||
}
|
||||
|
||||
flex.set_name_tags{main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao', 'pcode', 'pcode:*', 'ISO3166-2'}
|
||||
}
|
||||
|
||||
flex.set_address_tags{main = {'addr:housenumber',
|
||||
'addr:conscriptionnumber',
|
||||
'addr:streetnumber'},
|
||||
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||
'tiger:zip_left', 'tiger:zip_right'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'},
|
||||
interpolation = {'addr:interpolation'},
|
||||
postcode_fallback = false
|
||||
}
|
||||
|
||||
flex.set_unused_handling{extra_keys = {'place'}}
|
||||
flex.load_topic('street')
|
||||
|
||||
return flex
|
||||
|
||||
@@ -65,6 +65,8 @@ local place_table_definition = {
|
||||
}
|
||||
|
||||
local insert_row
|
||||
local script_path = debug.getinfo(1, "S").source:match("@?(.*/)")
|
||||
local PRESETS = loadfile(script_path .. 'presets.lua')()
|
||||
|
||||
if themepark then
|
||||
themepark:add_table(place_table_definition)
|
||||
@@ -687,12 +689,26 @@ end
|
||||
|
||||
|
||||
function module.ignore_keys(data)
|
||||
if type(data) == 'string' then
|
||||
local preset = data
|
||||
data = PRESETS.IGNORE_KEYS[data]
|
||||
if data == nil then
|
||||
error('Unknown preset for ignored keys: ' .. preset)
|
||||
end
|
||||
end
|
||||
merge_filters_into_main('delete', data)
|
||||
add_pre_filter{delete = data}
|
||||
end
|
||||
|
||||
|
||||
function module.add_for_extratags(data)
|
||||
if type(data) == 'string' then
|
||||
local preset = data
|
||||
data = PRESETS.EXTRATAGS[data] or PRESETS.IGNORE_KEYS[data]
|
||||
if data == nil then
|
||||
error('Unknown preset for extratags: ' .. preset)
|
||||
end
|
||||
end
|
||||
merge_filters_into_main('extra', data)
|
||||
add_pre_filter{extra = data}
|
||||
end
|
||||
@@ -709,11 +725,25 @@ function module.set_main_tags(data)
|
||||
MAIN_KEYS[key] = nil
|
||||
end
|
||||
end
|
||||
module.add_main_tags(data)
|
||||
module.modify_main_tags(data)
|
||||
end
|
||||
|
||||
|
||||
function module.add_main_tags(data)
|
||||
function module.modify_main_tags(data)
|
||||
if type(data) == 'string' then
|
||||
local preset = data
|
||||
if data:sub(1, 7) == 'street/' then
|
||||
data = PRESETS.MAIN_TAGS_STREETS[data:sub(8)]
|
||||
elseif data:sub(1, 4) == 'poi/' then
|
||||
data = PRESETS.MAIN_TAGS_POIS(data:sub(5))
|
||||
else
|
||||
data = PRESETS.MAIN_TAGS[data]
|
||||
end
|
||||
if data == nil then
|
||||
error('Unknown preset for main tags: ' .. preset)
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(data) do
|
||||
if MAIN_KEYS[k] == nil then
|
||||
MAIN_KEYS[k] = {}
|
||||
@@ -736,6 +766,14 @@ end
|
||||
|
||||
|
||||
function module.modify_name_tags(data)
|
||||
if type(data) == 'string' then
|
||||
local preset = data
|
||||
data = PRESETS.NAME_TAGS[data]
|
||||
if data == nil then
|
||||
error('Unknown preset for name keys: ' .. preset)
|
||||
end
|
||||
end
|
||||
|
||||
for k,v in pairs(data) do
|
||||
if next(v) then
|
||||
NAMES[k] = v
|
||||
@@ -764,6 +802,14 @@ end
|
||||
|
||||
|
||||
function module.modify_address_tags(data)
|
||||
if type(data) == 'string' then
|
||||
local preset = data
|
||||
data = PRESETS.ADDRESS_TAGS[data]
|
||||
if data == nil then
|
||||
error('Unknown preset for address keys: ' .. preset)
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(data) do
|
||||
if k == 'postcode_fallback' then
|
||||
POSTCODE_FALLBACK = v
|
||||
|
||||
281
lib-lua/themes/nominatim/presets.lua
Normal file
281
lib-lua/themes/nominatim/presets.lua
Normal file
@@ -0,0 +1,281 @@
|
||||
-- Defines defaults used in the topic definitions.
|
||||
|
||||
local module = {}
|
||||
|
||||
-- Main tag definition
|
||||
|
||||
module.MAIN_TAGS = {}
|
||||
|
||||
module.MAIN_TAGS.admin = {
|
||||
boundary = {administrative = 'named'},
|
||||
landuse = {residential = 'fallback',
|
||||
farm = 'fallback',
|
||||
farmyard = 'fallback',
|
||||
industrial = 'fallback',
|
||||
commercial = 'fallback',
|
||||
allotments = 'fallback',
|
||||
retail = 'fallback'},
|
||||
place = {county = 'always',
|
||||
district = 'always',
|
||||
municipality = 'always',
|
||||
city = 'always',
|
||||
town = 'always',
|
||||
borough = 'always',
|
||||
village = 'always',
|
||||
suburb = 'always',
|
||||
hamlet = 'always',
|
||||
croft = 'always',
|
||||
subdivision = 'always',
|
||||
allotments = 'always',
|
||||
neighbourhood = 'always',
|
||||
quarter = 'always',
|
||||
isolated_dwelling = 'always',
|
||||
farm = 'always',
|
||||
city_block = 'always',
|
||||
locality = 'always'}
|
||||
}
|
||||
|
||||
module.MAIN_TAGS.all_boundaries = {
|
||||
boundary = {'named',
|
||||
place = 'delete',
|
||||
land_area = 'delete',
|
||||
postal_code = 'always'},
|
||||
landuse = 'fallback',
|
||||
place = 'always'
|
||||
}
|
||||
|
||||
module.MAIN_TAGS.natural = {
|
||||
waterway = {'named',
|
||||
riverbank = 'delete'},
|
||||
natural = {'named',
|
||||
yes = 'delete',
|
||||
no = 'delete',
|
||||
coastline = 'delete',
|
||||
saddle = 'fallback'},
|
||||
mountain_pass = {'always',
|
||||
no = 'delete'}
|
||||
}
|
||||
|
||||
module.MAIN_TAGS_POIS = function (group)
|
||||
group = group or 'delete'
|
||||
return {
|
||||
aerialway = {'always',
|
||||
no = group,
|
||||
pylon = group},
|
||||
aeroway = {'always',
|
||||
no = group},
|
||||
amenity = {'always',
|
||||
no = group,
|
||||
parking_space = group,
|
||||
parking_entrance = group,
|
||||
waste_disposal = group,
|
||||
hunting_stand = group},
|
||||
building = {'fallback',
|
||||
no = group},
|
||||
bridge = {'named_with_key',
|
||||
no = group},
|
||||
club = {'always',
|
||||
no = group},
|
||||
craft = {'always',
|
||||
no = group},
|
||||
emergency = {'always',
|
||||
no = group,
|
||||
yes = group,
|
||||
fire_hydrant = group},
|
||||
healthcare = {'fallback',
|
||||
yes = group,
|
||||
no = group},
|
||||
highway = {'always',
|
||||
no = group,
|
||||
turning_circle = group,
|
||||
mini_roundabout = group,
|
||||
noexit = group,
|
||||
crossing = group,
|
||||
give_way = group,
|
||||
stop = group,
|
||||
turning_loop = group,
|
||||
passing_place = group,
|
||||
street_lamp = 'named',
|
||||
traffic_signals = 'named'},
|
||||
historic = {'always',
|
||||
yes = group,
|
||||
no = group},
|
||||
junction = {'fallback',
|
||||
no = group},
|
||||
leisure = {'always',
|
||||
nature_reserve = 'fallback',
|
||||
no = group},
|
||||
man_made = {pier = 'always',
|
||||
tower = 'always',
|
||||
bridge = 'always',
|
||||
works = 'named',
|
||||
water_tower = 'always',
|
||||
dyke = 'named',
|
||||
adit = 'named',
|
||||
lighthouse = 'always',
|
||||
watermill = 'always',
|
||||
tunnel = 'always'},
|
||||
military = {'always',
|
||||
yes = group,
|
||||
no = group},
|
||||
office = {'always',
|
||||
no = group},
|
||||
railway = {'named',
|
||||
rail = group,
|
||||
no = group,
|
||||
abandoned = group,
|
||||
disused = group,
|
||||
razed = group,
|
||||
level_crossing = group,
|
||||
switch = group,
|
||||
signal = group,
|
||||
buffer_stop = group},
|
||||
shop = {'always',
|
||||
no = group},
|
||||
tourism = {'always',
|
||||
no = group,
|
||||
yes = group},
|
||||
tunnel = {'named_with_key',
|
||||
no = group}
|
||||
} end
|
||||
|
||||
module.MAIN_TAGS_STREETS = {}
|
||||
|
||||
module.MAIN_TAGS_STREETS.default = {
|
||||
place = {square = 'always'},
|
||||
highway = {motorway = 'always',
|
||||
trunk = 'always',
|
||||
primary = 'always',
|
||||
secondary = 'always',
|
||||
tertiary = 'always',
|
||||
unclassified = 'always',
|
||||
residential = 'always',
|
||||
road = 'always',
|
||||
living_street = 'always',
|
||||
pedestrian = 'always',
|
||||
service = 'named',
|
||||
cycleway = 'named',
|
||||
path = 'named',
|
||||
footway = 'named',
|
||||
steps = 'named',
|
||||
bridleway = 'named',
|
||||
track = 'named',
|
||||
motorway_link = 'named',
|
||||
trunk_link = 'named',
|
||||
primary_link = 'named',
|
||||
secondary_link = 'named',
|
||||
tertiary_link = 'named'}
|
||||
}
|
||||
|
||||
module.MAIN_TAGS_STREETS.car = {
|
||||
place = {square = 'always'},
|
||||
highway = {motorway = 'always',
|
||||
trunk = 'always',
|
||||
primary = 'always',
|
||||
secondary = 'always',
|
||||
tertiary = 'always',
|
||||
unclassified = 'always',
|
||||
residential = 'always',
|
||||
road = 'always',
|
||||
living_street = 'always',
|
||||
service = 'always',
|
||||
track = 'always',
|
||||
motorway_link = 'always',
|
||||
trunk_link = 'always',
|
||||
primary_link = 'always',
|
||||
secondary_link = 'always',
|
||||
tertiary_link = 'always'}
|
||||
}
|
||||
|
||||
module.MAIN_TAGS_STREETS.all = {
|
||||
place = {square = 'always'},
|
||||
highway = {motorway = 'always',
|
||||
trunk = 'always',
|
||||
primary = 'always',
|
||||
secondary = 'always',
|
||||
tertiary = 'always',
|
||||
unclassified = 'always',
|
||||
residential = 'always',
|
||||
road = 'always',
|
||||
living_street = 'always',
|
||||
pedestrian = 'always',
|
||||
service = 'always',
|
||||
cycleway = 'always',
|
||||
path = 'always',
|
||||
footway = 'always',
|
||||
steps = 'always',
|
||||
bridleway = 'always',
|
||||
track = 'always',
|
||||
motorway_link = 'always',
|
||||
trunk_link = 'always',
|
||||
primary_link = 'always',
|
||||
secondary_link = 'always',
|
||||
tertiary_link = 'always'}
|
||||
}
|
||||
|
||||
|
||||
-- name tags
|
||||
|
||||
module.NAME_TAGS = {}
|
||||
|
||||
module.NAME_TAGS.core = {main = {'name', 'name:*',
|
||||
'int_name', 'int_name:*',
|
||||
'nat_name', 'nat_name:*',
|
||||
'reg_name', 'reg_name:*',
|
||||
'loc_name', 'loc_name:*',
|
||||
'old_name', 'old_name:*',
|
||||
'alt_name', 'alt_name:*', 'alt_name_*',
|
||||
'official_name', 'official_name:*',
|
||||
'place_name', 'place_name:*',
|
||||
'short_name', 'short_name:*'},
|
||||
extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref', 'ISO3166-2'}
|
||||
}
|
||||
module.NAME_TAGS.address = {house = {'addr:housename'}}
|
||||
module.NAME_TAGS.poi = {extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
|
||||
'loc_ref', 'old_ref',
|
||||
'iata', 'icao',
|
||||
'ISO3166-2'}}
|
||||
|
||||
-- Address tagging
|
||||
|
||||
module.ADDRESS_TAGS = {}
|
||||
|
||||
module.ADDRESS_TAGS.core = { extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||
'tiger:zip_left', 'tiger:zip_right'},
|
||||
country = {'country_code', 'ISO3166-1',
|
||||
'addr:country_code', 'is_in:country_code',
|
||||
'addr:country', 'is_in:country'}
|
||||
}
|
||||
|
||||
module.ADDRESS_TAGS.houses = { main = {'addr:housenumber',
|
||||
'addr:conscriptionnumber',
|
||||
'addr:streetnumber'},
|
||||
interpolation = {'addr:interpolation'}
|
||||
}
|
||||
|
||||
-- Ignored tags (prefiltered away)
|
||||
|
||||
module.IGNORE_KEYS = {}
|
||||
|
||||
module.IGNORE_KEYS.metatags = {'note', 'note:*', 'source', 'source:*', '*source',
|
||||
'attribution', 'comment', 'fixme', 'created_by',
|
||||
'tiger:cfcc', 'tiger:reviewed', 'nysgissam:*',
|
||||
'NHD:*', 'nhd:*', 'gnis:*', 'geobase:*', 'yh:*',
|
||||
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
|
||||
'lacounty:*', 'ref:linz:*',
|
||||
'ref:bygningsnr', 'ref:ruian:*', 'building:ruian:type',
|
||||
'type',
|
||||
'is_in:postcode'}
|
||||
module.IGNORE_KEYS.name = {'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||
'name:etymology', 'name:signed', 'name:botanical'}
|
||||
module.IGNORE_KEYS.address = {'addr:street:*', 'addr:TW:dataset'}
|
||||
|
||||
-- Extra tags (prefiltered away)
|
||||
|
||||
module.EXTRATAGS = {}
|
||||
|
||||
module.EXTRATAGS.required = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital'}
|
||||
|
||||
return module
|
||||
23
lib-lua/themes/nominatim/topics/address.lua
Normal file
23
lib-lua/themes/nominatim/topics/address.lua
Normal file
@@ -0,0 +1,23 @@
|
||||
local _, flex, cfg = ...
|
||||
|
||||
flex.set_main_tags('admin')
|
||||
flex.modify_main_tags('street/' .. (cfg.street_theme or 'default'))
|
||||
flex.modify_main_tags{boundary = {postal_code = 'always'}}
|
||||
|
||||
flex.set_name_tags('core')
|
||||
flex.modify_name_tags('address')
|
||||
|
||||
flex.set_address_tags('core')
|
||||
flex.modify_address_tags('houses')
|
||||
|
||||
flex.ignore_keys('metatags')
|
||||
flex.add_for_extratags('required')
|
||||
|
||||
if cfg.with_extratags then
|
||||
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||
flex.add_for_extratags('name')
|
||||
flex.add_for_extratags('address')
|
||||
else
|
||||
flex.ignore_keys('name')
|
||||
flex.ignore_keys('address')
|
||||
end
|
||||
20
lib-lua/themes/nominatim/topics/admin.lua
Normal file
20
lib-lua/themes/nominatim/topics/admin.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
local _, flex, cfg = ...
|
||||
|
||||
flex.set_main_tags('admin')
|
||||
|
||||
flex.set_name_tags('core')
|
||||
|
||||
flex.set_address_tags('core')
|
||||
flex.set_postcode_fallback(false)
|
||||
|
||||
flex.ignore_keys('metatags')
|
||||
flex.add_for_extratags('required')
|
||||
|
||||
if cfg.with_extratags then
|
||||
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||
flex.add_for_extratags('name')
|
||||
flex.add_for_extratags('address')
|
||||
else
|
||||
flex.ignore_keys('name')
|
||||
flex.ignore_keys('address')
|
||||
end
|
||||
32
lib-lua/themes/nominatim/topics/full.lua
Normal file
32
lib-lua/themes/nominatim/topics/full.lua
Normal file
@@ -0,0 +1,32 @@
|
||||
local _, flex, cfg = ...
|
||||
|
||||
local group
|
||||
if cfg.with_extratags then
|
||||
group = 'extra'
|
||||
else
|
||||
group = 'delete'
|
||||
end
|
||||
|
||||
flex.set_main_tags('all_boundaries')
|
||||
flex.modify_main_tags('natural')
|
||||
flex.modify_main_tags('street/' .. (cfg.street_theme or 'default'))
|
||||
flex.modify_main_tags('poi/' .. group)
|
||||
|
||||
flex.set_name_tags('core')
|
||||
flex.modify_name_tags('address')
|
||||
flex.modify_name_tags('poi')
|
||||
|
||||
flex.set_address_tags('core')
|
||||
flex.modify_address_tags('houses')
|
||||
|
||||
flex.ignore_keys('metatags')
|
||||
flex.add_for_extratags('required')
|
||||
|
||||
if cfg.with_extratags then
|
||||
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||
flex.add_for_extratags('name')
|
||||
flex.add_for_extratags('address')
|
||||
else
|
||||
flex.ignore_keys('name')
|
||||
flex.ignore_keys('address')
|
||||
end
|
||||
22
lib-lua/themes/nominatim/topics/street.lua
Normal file
22
lib-lua/themes/nominatim/topics/street.lua
Normal file
@@ -0,0 +1,22 @@
|
||||
local _, flex, cfg = ...
|
||||
|
||||
flex.set_main_tags('admin')
|
||||
flex.modify_main_tags('street/' .. (cfg.street_theme or 'default'))
|
||||
flex.modify_main_tags{boundary = {postal_code = 'always'}}
|
||||
|
||||
flex.set_name_tags('core')
|
||||
|
||||
flex.set_address_tags('core')
|
||||
flex.set_postcode_fallback(false)
|
||||
|
||||
flex.ignore_keys('metatags')
|
||||
flex.add_for_extratags('required')
|
||||
|
||||
if cfg.with_extratags then
|
||||
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||
flex.add_for_extratags('name')
|
||||
flex.add_for_extratags('address')
|
||||
else
|
||||
flex.ignore_keys('name')
|
||||
flex.ignore_keys('address')
|
||||
end
|
||||
@@ -27,7 +27,6 @@ Feature: Object details
|
||||
Examples:
|
||||
| class |
|
||||
| tourism |
|
||||
| natural |
|
||||
| mountain_pass |
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ Feature: Import with custom styles by osm2pgsql
|
||||
"""
|
||||
local flex = require('import-full')
|
||||
|
||||
flex.add_main_tags{
|
||||
flex.modify_main_tags{
|
||||
amenity = {prison = 'delete'},
|
||||
highway = {stop = 'named'},
|
||||
aeroway = 'named'
|
||||
|
||||
@@ -131,7 +131,7 @@ Feature: Tag evaluation
|
||||
When loading osm data
|
||||
"""
|
||||
n8001 Tshop=shoes,note:de=Nein,xx=yy
|
||||
n8002 Tshop=shoes,building=no,ele=234
|
||||
n8002 Tshop=shoes,natural=no,ele=234
|
||||
n8003 Tshop=shoes,name:source=survey
|
||||
"""
|
||||
Then place contains exactly
|
||||
|
||||
Reference in New Issue
Block a user