mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-07 02:24:08 +00:00
flex: switch to functions for substyles
This gives us a bit more flexibility about the implementation in the future.
This commit is contained in:
@@ -46,14 +46,12 @@ function Place.new(object, geom_func)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Place:clean(data)
|
function Place:clean(data)
|
||||||
if data.delete ~= nil or data.extra ~= nil then
|
for k, v in pairs(self.object.tags) do
|
||||||
for k, v in pairs(self.object.tags) do
|
if data.delete ~= nil and data.delete(k, v) then
|
||||||
if data.delete ~= nil and data.delete(k, v) then
|
self.object.tags[k] = nil
|
||||||
self.object.tags[k] = nil
|
elseif data.extra ~= nil and data.extra(k, v) then
|
||||||
elseif data.extra ~= nil and data.extra(k, v) then
|
self.extratags[k] = v
|
||||||
self.extratags[k] = v
|
self.object.tags[k] = nil
|
||||||
self.object.tags[k] = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -182,6 +180,7 @@ function Place:grab_name_parts(data)
|
|||||||
|
|
||||||
if atype ~= nil then
|
if atype ~= nil then
|
||||||
self.names[k] = v
|
self.names[k] = v
|
||||||
|
self.object.tags[k] = nil
|
||||||
if atype == 'main' then
|
if atype == 'main' then
|
||||||
self.has_name = true
|
self.has_name = true
|
||||||
elseif atype == 'house' then
|
elseif atype == 'house' then
|
||||||
@@ -487,6 +486,40 @@ function module.process_tags(o)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------- Convenience functions for simple style configuration -----------------
|
||||||
|
|
||||||
|
function module.set_prefilters(data)
|
||||||
|
module.PRE_DELETE = module.tag_match{keys = data.delete_keys, tags = data.delete_tags}
|
||||||
|
module.PRE_EXTRAS = module.tag_match{keys = data.extratag_keys,
|
||||||
|
tags = data.extratag_tags}
|
||||||
|
end
|
||||||
|
|
||||||
|
function module.set_main_tags(data)
|
||||||
|
module.MAIN_KEYS = data
|
||||||
|
end
|
||||||
|
|
||||||
|
function module.set_name_tags(data)
|
||||||
|
module.NAMES = module.tag_group(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
function module.set_address_tags(data)
|
||||||
|
module.ADDRESS_TAGS = module.tag_group(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
function module.set_unused_handling(data)
|
||||||
|
if data.extra_keys == nil and data.extra_tags == nil then
|
||||||
|
module.POST_DELETE = module.tag_match{data.delete_keys, tags = data.delete_tags}
|
||||||
|
module.POST_EXTRAS = nil
|
||||||
|
module.SAVE_EXTRA_MAINS = true
|
||||||
|
elseif data.delete_keys == nil and data.delete_tags == nil then
|
||||||
|
module.POST_DELETE = nil
|
||||||
|
module.POST_EXTRAS = module.tag_match{data.extra_keys, tags = data.extra_tags}
|
||||||
|
module.SAVE_EXTRA_MAINS = false
|
||||||
|
else
|
||||||
|
error("unused handler can have only 'extra_keys' or 'delete_keys' set.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
------ defaults --------------
|
------ defaults --------------
|
||||||
|
|
||||||
module.RELATION_TYPES = {
|
module.RELATION_TYPES = {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
flex = require('flex-base')
|
flex = require('flex-base')
|
||||||
|
|
||||||
flex.MAIN_KEYS = {
|
flex.set_main_tags{
|
||||||
building = 'fallback',
|
building = 'fallback',
|
||||||
emergency = 'always',
|
emergency = 'always',
|
||||||
healthcare = 'fallback',
|
healthcare = 'fallback',
|
||||||
@@ -45,47 +45,42 @@ flex.MAIN_KEYS = {
|
|||||||
place = 'always'
|
place = 'always'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flex.set_prefilters{delete_keys = {'note', 'note:*', 'source', '*source', 'attribution',
|
||||||
flex.PRE_DELETE = flex.tag_match{keys = {'note', 'note:*', 'source', 'source*', 'attribution',
|
'comment', 'fixme', 'FIXME', 'created_by', 'NHD:*',
|
||||||
'comment', 'fixme', 'FIXME', 'created_by', 'NHD:*',
|
'nhd:*', 'gnis:*', 'geobase:*', 'KSJ2:*', 'yh:*',
|
||||||
'nhd:*', 'gnis:*', 'geobase:*', 'KSJ2:*', 'yh:*',
|
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
|
||||||
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
|
'type', 'lacounty:*', 'ref:ruian:*', 'building:ruian:type',
|
||||||
'type', 'lacounty:*', 'ref:ruian:*', 'building:ruian:type',
|
'ref:linz:*', 'is_in:postcode'},
|
||||||
'ref:linz:*', 'is_in:postcode'},
|
delete_tags = {emergency = {'yes', 'no', 'fire_hydrant'},
|
||||||
tags = {emergency = {'yes', 'no', 'fire_hydrant'},
|
historic = {'yes', 'no'},
|
||||||
historic = {'yes', 'no'},
|
military = {'yes', 'no'},
|
||||||
military = {'yes', 'no'},
|
natural = {'yes', 'no', 'coastline'},
|
||||||
natural = {'yes', 'no', 'coastline'},
|
highway = {'no', 'turning_circle', 'mini_roundabout',
|
||||||
highway = {'no', 'turning_circle', 'mini_roundabout',
|
'noexit', 'crossing', 'give_way', 'stop'},
|
||||||
'noexit', 'crossing', 'give_way', 'stop'},
|
railway = {'level_crossing', 'no', 'rail'},
|
||||||
railway = {'level_crossing', 'no', 'rail'},
|
man_made = {'survey_point', 'cutline'},
|
||||||
man_made = {'survey_point', 'cutline'},
|
aerialway = {'pylon', 'no'},
|
||||||
aerialway = {'pylon', 'no'},
|
aeroway = {'no'},
|
||||||
aeroway = {'no'},
|
amenity = {'no'},
|
||||||
amenity = {'no'},
|
club = {'no'},
|
||||||
club = {'no'},
|
craft = {'no'},
|
||||||
craft = {'no'},
|
leisure = {'no'},
|
||||||
leisure = {'no'},
|
office = {'no'},
|
||||||
office = {'no'},
|
mountain_pass = {'no'},
|
||||||
mountain_pass = {'no'},
|
shop = {'no'},
|
||||||
shop = {'no'},
|
tourism = {'yes', 'no'},
|
||||||
tourism = {'yes', 'no'},
|
bridge = {'no'},
|
||||||
bridge = {'no'},
|
tunnel = {'no'},
|
||||||
tunnel = {'no'},
|
waterway = {'riverbank'},
|
||||||
waterway = {'riverbank'},
|
building = {'no'},
|
||||||
building = {'no'},
|
boundary = {'place'}},
|
||||||
boundary = {'place'}}
|
extratag_keys = {'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
||||||
}
|
|
||||||
|
|
||||||
flex.POST_DELETE = flex.tag_match{keys = {'tiger:*'}}
|
|
||||||
|
|
||||||
flex.PRE_EXTRAS = flex.tag_match{keys = {'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
|
|
||||||
'name:etymology', 'name:signed', 'name:botanical',
|
'name:etymology', 'name:signed', 'name:botanical',
|
||||||
'wikidata', '*:wikidata',
|
'wikidata', '*:wikidata',
|
||||||
'addr:street:name', 'addr:street:type'}
|
'addr:street:name', 'addr:street:type'}
|
||||||
}
|
}
|
||||||
|
|
||||||
flex.NAMES = flex.tag_group{main = {'name', 'name:*',
|
flex.set_name_tags{main = {'name', 'name:*',
|
||||||
'int_name', 'int_name:*',
|
'int_name', 'int_name:*',
|
||||||
'nat_name', 'nat_name:*',
|
'nat_name', 'nat_name:*',
|
||||||
'reg_name', 'reg_name:*',
|
'reg_name', 'reg_name:*',
|
||||||
@@ -101,17 +96,17 @@ flex.NAMES = flex.tag_group{main = {'name', 'name:*',
|
|||||||
house = {'addr:housename'}
|
house = {'addr:housename'}
|
||||||
}
|
}
|
||||||
|
|
||||||
flex.ADDRESS_TAGS = flex.tag_group{main = {'addr:housenumber',
|
flex.set_address_tags{main = {'addr:housenumber',
|
||||||
'addr:conscriptionnumber',
|
'addr:conscriptionnumber',
|
||||||
'addr:streetnumber'},
|
'addr:streetnumber'},
|
||||||
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
extra = {'addr:*', 'is_in:*', 'tiger:county'},
|
||||||
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
postcode = {'postal_code', 'postcode', 'addr:postcode',
|
||||||
'tiger:zip_left', 'tiger:zip_right'},
|
'tiger:zip_left', 'tiger:zip_right'},
|
||||||
country = {'country_code', 'ISO3166-1',
|
country = {'country_code', 'ISO3166-1',
|
||||||
'addr:country_code', 'is_in:country_code',
|
'addr:country_code', 'is_in:country_code',
|
||||||
'addr:country', 'is_in:country'},
|
'addr:country', 'is_in:country'},
|
||||||
interpolation = {'addr:interpolation'}
|
interpolation = {'addr:interpolation'}
|
||||||
}
|
}
|
||||||
|
|
||||||
flex.SAVE_EXTRA_MAINS = true
|
|
||||||
|
|
||||||
|
flex.set_unused_handling{delete_keys = {'tiger:*'}}
|
||||||
|
|||||||
Reference in New Issue
Block a user