Files
osm2pgsql/flex-config/generic.lua

282 lines
6.6 KiB
Lua

-- This config example file is released into the Public Domain.
-- This is a generic configuration that is a good starting point for
-- real-world projects. Data is split into tables according to geometry type
-- and most tags are stored in jsonb columns.
-- Set this to the projection you want to use
local srid = 3857
local tables = {}
tables.points = osm2pgsql.define_node_table('points', {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'point', projection = srid, not_null = true },
})
tables.lines = osm2pgsql.define_way_table('lines', {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'linestring', projection = srid, not_null = true },
})
tables.polygons = osm2pgsql.define_area_table('polygons', {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'geometry', projection = srid, not_null = true },
})
tables.routes = osm2pgsql.define_relation_table('routes', {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'multilinestring', projection = srid, not_null = true },
})
tables.boundaries = osm2pgsql.define_relation_table('boundaries', {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'multilinestring', projection = srid, not_null = true },
})
-- These tag keys are generally regarded as useless for most rendering. Most
-- of them are from imports or intended as internal information for mappers.
--
-- If a key ends in '*' it will match all keys with the specified prefix.
--
-- If you want some of these keys, perhaps for a debugging layer, just
-- delete the corresponding lines.
local delete_keys = {
-- "mapper" keys
'attribution',
'comment',
'created_by',
'fixme',
'note',
'note:*',
'odbl',
'odbl:note',
'source',
'source:*',
'source_ref',
-- "import" keys
-- Corine Land Cover (CLC) (Europe)
'CLC:*',
-- Geobase (CA)
'geobase:*',
-- CanVec (CA)
'canvec:*',
-- osak (DK)
'osak:*',
-- kms (DK)
'kms:*',
-- ngbe (ES)
-- See also note:es and source:file above
'ngbe:*',
-- Friuli Venezia Giulia (IT)
'it:fvg:*',
-- KSJ2 (JA)
-- See also note:ja and source_ref above
'KSJ2:*',
-- Yahoo/ALPS (JA)
'yh:*',
-- LINZ (NZ)
'LINZ2OSM:*',
'linz2osm:*',
'LINZ:*',
'ref:linz:*',
-- WroclawGIS (PL)
'WroclawGIS:*',
-- Naptan (UK)
'naptan:*',
-- TIGER (US)
'tiger:*',
-- GNIS (US)
'gnis:*',
-- National Hydrography Dataset (US)
'NHD:*',
'nhd:*',
-- mvdgis (Montevideo, UY)
'mvdgis:*',
-- EUROSHA (Various countries)
'project:eurosha_2012',
-- UrbIS (Brussels, BE)
'ref:UrbIS',
-- NHN (CA)
'accuracy:meters',
'sub_sea:type',
'waterway:type',
-- StatsCan (CA)
'statscan:rbuid',
-- RUIAN (CZ)
'ref:ruian:addr',
'ref:ruian',
'building:ruian:type',
-- DIBAVOD (CZ)
'dibavod:id',
-- UIR-ADR (CZ)
'uir_adr:ADRESA_KOD',
-- GST (DK)
'gst:feat_id',
-- Maa-amet (EE)
'maaamet:ETAK',
-- FANTOIR (FR)
'ref:FR:FANTOIR',
-- 3dshapes (NL)
'3dshapes:ggmodelk',
-- AND (NL)
'AND_nosr_r',
-- OPPDATERIN (NO)
'OPPDATERIN',
-- Various imports (PL)
'addr:city:simc',
'addr:street:sym_ul',
'building:usage:pl',
'building:use:pl',
-- TERYT (PL)
'teryt:simc',
-- RABA (SK)
'raba:id',
-- DCGIS (Washington DC, US)
'dcgis:gis_id',
-- Building Identification Number (New York, US)
'nycdoitt:bin',
-- Chicago Building Inport (US)
'chicago:building_id',
-- Louisville, Kentucky/Building Outlines Import (US)
'lojic:bgnum',
-- MassGIS (Massachusetts, US)
'massgis:way_id',
-- Los Angeles County building ID (US)
'lacounty:*',
-- Address import from Bundesamt für Eich- und Vermessungswesen (AT)
'at_bev:addr_date',
-- misc
'import',
'import_uuid',
'OBJTYPE',
'SK53_bulk:load',
'mml:class'
}
-- The osm2pgsql.make_clean_tags_func() function takes the list of keys
-- and key prefixes defined above and returns a function that can be used
-- to clean those tags out of a Lua table. The clean_tags function will
-- return true if it removed all tags from the table.
local clean_tags = osm2pgsql.make_clean_tags_func(delete_keys)
-- Helper function that looks at the tags and decides if this is possibly
-- an area.
local function has_area_tags(tags)
if tags.area == 'yes' then
return true
end
if tags.area == 'no' then
return false
end
return tags.aeroway
or tags.amenity
or tags.building
or tags.harbour
or tags.historic
or tags.landuse
or tags.leisure
or tags.man_made
or tags.military
or tags.natural
or tags.office
or tags.place
or tags.power
or tags.public_transport
or tags.shop
or tags.sport
or tags.tourism
or tags.water
or tags.waterway
or tags.wetland
or tags['abandoned:aeroway']
or tags['abandoned:amenity']
or tags['abandoned:building']
or tags['abandoned:landuse']
or tags['abandoned:power']
or tags['area:highway']
or tags['building:part']
end
function osm2pgsql.process_node(object)
if clean_tags(object.tags) then
return
end
tables.points:insert({
tags = object.tags,
geom = object:as_point()
})
end
function osm2pgsql.process_way(object)
if clean_tags(object.tags) then
return
end
if object.is_closed and has_area_tags(object.tags) then
tables.polygons:insert({
tags = object.tags,
geom = object:as_polygon()
})
else
tables.lines:insert({
tags = object.tags,
geom = object:as_linestring()
})
end
end
function osm2pgsql.process_relation(object)
local relation_type = object:grab_tag('type')
if clean_tags(object.tags) then
return
end
if relation_type == 'route' then
tables.routes:insert({
tags = object.tags,
geom = object:as_multilinestring()
})
return
end
if relation_type == 'boundary' or (relation_type == 'multipolygon' and object.tags.boundary) then
tables.boundaries:insert({
tags = object.tags,
geom = object:as_multilinestring():line_merge()
})
return
end
if relation_type == 'multipolygon' then
tables.polygons:insert({
tags = object.tags,
geom = object:as_multipolygon()
})
end
end