X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/59bce26afef3fd65e606e09979c11733dfac6966..48333bfbd4d89f539f960a565aeb932e95129fc6:/lib-lua/themes/nominatim/presets.lua diff --git a/lib-lua/themes/nominatim/presets.lua b/lib-lua/themes/nominatim/presets.lua index 01932812..7afb204a 100644 --- a/lib-lua/themes/nominatim/presets.lua +++ b/lib-lua/themes/nominatim/presets.lua @@ -2,6 +2,84 @@ local module = {} +-- Helper functions + +local function group_merge(group1, group2) + for name, values in pairs(group2) do + if group1[name] == nil then + group1[name] = values + else + for _, v in pairs(values) do + table.insert(group1[name], v) + end + end + end + + return group1 +end + +-- Customized main tag filter functions + +local EXCLUDED_FOOTWAYS = { sidewalk = 1, crossing = 1, link = 1, traffic_aisle } + +local function filter_footways(place) + if place.has_name then + local footway = place.object.tags.footway + if footway == nil or EXCLUDED_FOOTWAYS[footway] ~= 1 then + return place + end + end + return false +end + +local function include_when_tag_present(key, value, named) + if named then + return function(place) + if place.has_name and place.intags[key] == value then + return place + end + return false + end + else + return function(place) + if place.intags[key] == value then + return place + end + return false + end + end +end + +local function exclude_when_key_present(key, named) + if named then + return function(place) + if place.has_name and place.intags[key] == nil then + return place + end + return false + end + else + return function(place) + if place.intags[key] == nil then + return place + end + return false + end + + end +end + +local function lock_transform(place) + if place.object.tags.waterway ~= nil then + local name = place.object.tags.lock_name + if name ~= nil then + return place:clone{names={name=name, ref=place.object.tags.lock_ref}} + end + end + + return false +end + -- Main tag definition module.MAIN_TAGS = {} @@ -51,9 +129,21 @@ module.MAIN_TAGS.natural = { yes = 'delete', no = 'delete', coastline = 'delete', - saddle = 'fallback'}, + saddle = 'fallback', + water = exclude_when_key_present('water', true)}, mountain_pass = {'always', - no = 'delete'} + no = 'delete'}, + water = {include_when_tag_present('natural', 'water', true), + river = 'never', + stream = 'never', + canal = 'never', + ditch = 'never', + drain = 'never', + fish_pass = 'never', + yes = 'delete', + intermittent = 'delete', + tidal = 'delete' + } } module.MAIN_TAGS_POIS = function (group) @@ -100,11 +190,14 @@ module.MAIN_TAGS_POIS = function (group) historic = {'always', yes = group, no = group}, + information = {include_when_tag_present('tourism', 'information')}, junction = {'fallback', no = group}, leisure = {'always', nature_reserve = 'fallback', + swimming_pool = 'named', no = group}, + lock = {yes = lock_transform}, man_made = {pier = 'always', tower = 'always', bridge = 'always', @@ -134,7 +227,8 @@ module.MAIN_TAGS_POIS = function (group) no = group}, tourism = {'always', no = group, - yes = group}, + yes = group, + information = 'fallback'}, tunnel = {'named_with_key', no = group} } end @@ -156,7 +250,7 @@ module.MAIN_TAGS_STREETS.default = { service = 'named', cycleway = 'named', path = 'named', - footway = 'named', + footway = filter_footways, steps = 'named', bridleway = 'named', track = 'named', @@ -232,10 +326,9 @@ module.NAME_TAGS.core = {main = {'name', 'name:*', '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'}} +module.NAME_TAGS.poi = group_merge({main = {'brand'}, + extra = {'iata', 'icao'}}, + module.NAME_TAGS.core) -- Address tagging @@ -269,8 +362,11 @@ module.IGNORE_KEYS.metatags = {'note', 'note:*', 'source', 'source:*', '*source' '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'} + 'name:etymology', 'name:etymology:*', + 'name:signed', 'name:botanical'} +module.IGNORE_KEYS.address = {'addr:street:*', 'addr:city:*', 'addr:district:*', + 'addr:province:*', 'addr:subdistrict:*', 'addr:place:*', + 'addr:TW:dataset'} -- Extra tags (prefiltered away)