1 -- Defines defaults used in the topic definitions.
 
   7 local function group_merge(group1, group2)
 
   8     for name, values in pairs(group2) do
 
   9         if group1[name] == nil then
 
  12             for _, v in pairs(values) do
 
  13                 table.insert(group1[name], v)
 
  21 -- Customized main tag filter functions
 
  23 local EXCLUDED_FOOTWAYS = { sidewalk = 1, crossing = 1, link = 1, traffic_aisle }
 
  25 local function filter_footways(place)
 
  26     if place.has_name then
 
  27         local footway = place.object.tags.footway
 
  28         if footway == nil or EXCLUDED_FOOTWAYS[footway] ~= 1 then
 
  35 local function include_when_tag_present(key, value, named)
 
  37         return function(place)
 
  38                    if place.has_name and place.intags[key] == value then
 
  44         return function(place)
 
  45                    if place.intags[key] == value then
 
  53 local function exclude_when_key_present(key, named)
 
  55         return function(place)
 
  56                    if place.has_name and place.intags[key] == nil then
 
  62         return function(place)
 
  63                    if place.intags[key] == nil then
 
  72 local function lock_transform(place)
 
  73     if place.object.tags.waterway ~= nil then
 
  74         local name = place.object.tags.lock_name
 
  76             return place:clone{names={name=name, ref=place.object.tags.lock_ref}}
 
  83 -- Main tag definition
 
  87 module.MAIN_TAGS.admin = {
 
  88     boundary = {administrative = 'named'},
 
  89     landuse = {residential = 'fallback',
 
  91                farmyard = 'fallback',
 
  92                industrial = 'fallback',
 
  93                commercial = 'fallback',
 
  94                allotments = 'fallback',
 
  96     place = {county = 'always',
 
  98              municipality = 'always',
 
 106              subdivision = 'always',
 
 107              allotments = 'always',
 
 108              neighbourhood = 'always',
 
 110              isolated_dwelling = 'always',
 
 112              city_block = 'always',
 
 116 module.MAIN_TAGS.all_boundaries = {
 
 119                 land_area = 'delete',
 
 120                 postal_code = 'always'},
 
 121     landuse = 'fallback',
 
 125 module.MAIN_TAGS.natural = {
 
 127                 riverbank = 'delete'},
 
 131                coastline = 'delete',
 
 133                water = exclude_when_key_present('water', true)},
 
 134     mountain_pass = {'always',
 
 136     water = {include_when_tag_present('natural', 'water', true),
 
 144              intermittent = 'delete',
 
 149 module.MAIN_TAGS_POIS = function (group)
 
 150     group = group or 'delete'
 
 152     aerialway = {'always',
 
 159                parking_space = group,
 
 160                parking_entrance = group,
 
 161                waste_disposal = group,
 
 162                hunting_stand = group},
 
 163     building = {'fallback',
 
 165     bridge = {'named_with_key',
 
 171     emergency = {'always',
 
 174                  fire_hydrant = group},
 
 175     entrance = {'always',
 
 177     ["routing:entrance"] = {exclude_when_key_present('entrance'),
 
 179     healthcare = {'fallback',
 
 184                turning_circle = group,
 
 185                mini_roundabout = group,
 
 190                turning_loop = group,
 
 191                passing_place = group,
 
 192                street_lamp = 'named',
 
 193                traffic_signals = 'named'},
 
 194     historic = {'fallback',
 
 197     information = {include_when_tag_present('tourism', 'information'),
 
 199                    route_marker = 'never',
 
 200                    trail_blaze = 'never'},
 
 201     junction = {'fallback',
 
 203     landuse = {cemetery = 'always'},
 
 205                nature_reserve = 'fallback',
 
 206                swimming_pool = 'named',
 
 208     lock = {yes = lock_transform},
 
 209     man_made = {pier = 'always',
 
 213                 water_tower = 'always',
 
 216                 lighthouse = 'always',
 
 217                 watermill = 'always',
 
 219     military = {'always',
 
 230                level_crossing = group,
 
 233                buffer_stop = group},
 
 237                attraction = 'fallback',
 
 240                information = exclude_when_key_present('information')},
 
 241     tunnel = {'named_with_key',
 
 245 module.MAIN_TAGS_STREETS = {}
 
 247 module.MAIN_TAGS_STREETS.default = {
 
 248     place = {square = 'always'},
 
 249     highway = {motorway = 'always',
 
 252                secondary = 'always',
 
 254                unclassified = 'always',
 
 255                residential = 'always',
 
 257                living_street = 'always',
 
 258                pedestrian = 'always',
 
 262                footway = filter_footways,
 
 266                motorway_link = 'named',
 
 267                trunk_link = 'named',
 
 268                primary_link = 'named',
 
 269                secondary_link = 'named',
 
 270                tertiary_link = 'named'}
 
 273 module.MAIN_TAGS_STREETS.car = {
 
 274     place = {square = 'always'},
 
 275     highway = {motorway = 'always',
 
 278                secondary = 'always',
 
 280                unclassified = 'always',
 
 281                residential = 'always',
 
 283                living_street = 'always',
 
 286                motorway_link = 'always',
 
 287                trunk_link = 'always',
 
 288                primary_link = 'always',
 
 289                secondary_link = 'always',
 
 290                tertiary_link = 'always'}
 
 293 module.MAIN_TAGS_STREETS.all = {
 
 294     place = {square = 'always'},
 
 295     highway = {motorway = 'always',
 
 298                secondary = 'always',
 
 300                unclassified = 'always',
 
 301                residential = 'always',
 
 303                living_street = 'always',
 
 304                pedestrian = 'always',
 
 310                bridleway = 'always',
 
 312                motorway_link = 'always',
 
 313                trunk_link = 'always',
 
 314                primary_link = 'always',
 
 315                secondary_link = 'always',
 
 316                tertiary_link = 'always'}
 
 322 module.NAME_TAGS = {}
 
 324 module.NAME_TAGS.core = {main = {'name', 'name:*',
 
 325                                  'int_name', 'int_name:*',
 
 326                                  'nat_name', 'nat_name:*',
 
 327                                  'reg_name', 'reg_name:*',
 
 328                                  'loc_name', 'loc_name:*',
 
 329                                  'old_name', 'old_name:*',
 
 330                                  'alt_name', 'alt_name:*', 'alt_name_*',
 
 331                                  'official_name', 'official_name:*',
 
 332                                  'place_name', 'place_name:*',
 
 333                                  'short_name', 'short_name:*'},
 
 334                          extra = {'ref', 'int_ref', 'nat_ref', 'reg_ref',
 
 335                                   'loc_ref', 'old_ref', 'ISO3166-2'}
 
 337 module.NAME_TAGS.address = {house = {'addr:housename'}}
 
 338 module.NAME_TAGS.poi = group_merge({main = {'brand'},
 
 339                                     extra = {'iata', 'icao', 'faa'}},
 
 340                                    module.NAME_TAGS.core)
 
 344 module.ADDRESS_TAGS = {}
 
 346 module.ADDRESS_TAGS.core = { extra = {'addr:*', 'is_in:*', 'tiger:county'},
 
 347                              postcode = {'postal_code', 'postcode', 'addr:postcode',
 
 348                                          'tiger:zip_left', 'tiger:zip_right'},
 
 349                              country = {'country_code', 'ISO3166-1',
 
 350                                         'addr:country_code', 'is_in:country_code',
 
 351                                         'addr:country', 'is_in:country'}
 
 354 module.ADDRESS_TAGS.houses = { main = {'addr:housenumber',
 
 355                                        'addr:conscriptionnumber',
 
 356                                        'addr:streetnumber'},
 
 357                                interpolation = {'addr:interpolation'}
 
 360 -- Ignored tags (prefiltered away)
 
 362 module.IGNORE_KEYS = {}
 
 364 module.IGNORE_KEYS.metatags = {'note', 'note:*', 'source', 'source:*', '*source',
 
 365                                'attribution', 'comment', 'fixme', 'created_by',
 
 366                                'tiger:cfcc', 'tiger:reviewed', 'nysgissam:*',
 
 367                                'NHD:*', 'nhd:*', 'gnis:*', 'geobase:*', 'yh:*',
 
 368                                'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
 
 369                                'lacounty:*', 'ref:linz:*', 'survey:*',
 
 370                                'ref:bygningsnr', 'ref:ruian:*', 'building:ruian:type',
 
 373 module.IGNORE_KEYS.name = {'*:prefix', '*:suffix', 'name:prefix:*', 'name:suffix:*',
 
 374                            'name:etymology', 'name:etymology:*',
 
 375                            'name:signed', 'name:botanical'}
 
 376 module.IGNORE_KEYS.address = {'addr:street:*', 'addr:city:*', 'addr:district:*',
 
 377                               'addr:province:*', 'addr:subdistrict:*', 'addr:place:*',
 
 380 -- Extra tags (prefiltered away)
 
 382 module.EXTRATAGS = {}
 
 384 module.EXTRATAGS.required = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital'}