X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/5751686fdce33f6b69a93dd1641ceacb2239791f..a7a920a9a5b55bf4290b184f05898a8589c95b40:/settings/flex-base.lua diff --git a/settings/flex-base.lua b/settings/flex-base.lua index 58d60228..7860737f 100644 --- a/settings/flex-base.lua +++ b/settings/flex-base.lua @@ -5,12 +5,18 @@ local module = {} local PRE_DELETE = nil local PRE_EXTRAS = nil +local POST_DELETE = nil local MAIN_KEYS = nil local NAMES = nil local ADDRESS_TAGS = nil local SAVE_EXTRA_MAINS = false local POSTCODE_FALLBACK = true +-- tables required for taginfo +module.TAGINFO_MAIN = {keys = {}, delete_tags = {}} +module.TAGINFO_NAME_KEYS = {} +module.TAGINFO_ADDRESS_KEYS = {} + -- The single place table. local place_table = osm2pgsql.define_table{ @@ -25,6 +31,8 @@ local place_table = osm2pgsql.define_table{ { column = 'extratags', type = 'hstore' }, { column = 'geometry', type = 'geometry', projection = 'WGS84', not_null = true }, }, + data_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_DATA"), + index_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_INDEX"), indexes = {} } @@ -219,7 +227,7 @@ function Place:write_row(k, v, save_extra_mains) if self.geometry == nil then self.geometry = self.geom_func(self.object) end - if self.geometry:is_null() then + if self.geometry == nil or self.geometry:is_null() then return 0 end @@ -242,9 +250,9 @@ function Place:write_row(k, v, save_extra_mains) } if save_extra_mains then - for k, v in pairs(self.object.tags) do - if save_extra_mains(k, v) then - self.extratags[k] = nil + for tk, tv in pairs(self.object.tags) do + if save_extra_mains(tk, tv) then + self.extratags[tk] = nil end end end @@ -372,6 +380,17 @@ function module.tag_group(data) end end +-- Returns prefix part of the keys, and reject suffix matching keys +local function process_key(key) + if key:sub(1, 1) == '*' then + return nil + end + if key:sub(#key, #key) == '*' then + return key:sub(1, #key - 2) + end + return key +end + -- Process functions for all data types function module.process_node(object) @@ -389,6 +408,9 @@ function module.process_way(object) if geom:is_null() then geom = o:as_linestring() + if not geom:is_null() and geom:length() > 30 then + return nil + end end return geom @@ -465,14 +487,29 @@ function module.set_prefilters(data) PRE_DELETE = module.tag_match{keys = data.delete_keys, tags = data.delete_tags} PRE_EXTRAS = module.tag_match{keys = data.extra_keys, tags = data.extra_tags} + module.TAGINFO_MAIN.delete_tags = data.delete_tags end function module.set_main_tags(data) MAIN_KEYS = data + local keys = {} + for k, _ in pairs(data) do + table.insert(keys, k) + end + module.TAGINFO_MAIN.keys = keys end function module.set_name_tags(data) NAMES = module.tag_group(data) + + for _, lst in pairs(data) do + for _, k in ipairs(lst) do + local key = process_key(k) + if key ~= nil then + module.TAGINFO_NAME_KEYS[key] = true + end + end + end end function module.set_address_tags(data) @@ -480,8 +517,18 @@ function module.set_address_tags(data) POSTCODE_FALLBACK = data.postcode_fallback data.postcode_fallback = nil end - ADDRESS_TAGS = module.tag_group(data) + + for _, lst in pairs(data) do + if lst ~= nil then + for _, k in ipairs(lst) do + local key = process_key(k) + if key ~= nil then + module.TAGINFO_ADDRESS_KEYS[key] = true + end + end + end + end end function module.set_unused_handling(data) @@ -496,7 +543,7 @@ function module.set_unused_handling(data) end end -function set_relation_types(data) +function module.set_relation_types(data) module.RELATION_TYPES = {} for k, v in data do if v == 'multipolygon' then