-
-
Notifications
You must be signed in to change notification settings - Fork 475
Expand file tree
/
Copy pathexpire.lua
More file actions
167 lines (148 loc) · 5.11 KB
/
expire.lua
File metadata and controls
167 lines (148 loc) · 5.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
-- This config example file is released into the Public Domain.
--
-- This examples shows how to use tile expiry.
local expire_outputs = {}
expire_outputs.pois = osm2pgsql.define_expire_output({
-- The zoom level at which we calculate the tiles. This must always be set.
maxzoom = 14,
-- The filename where tile list should be written to.
filename = 'pois.tiles'
})
expire_outputs.lines = osm2pgsql.define_expire_output({
maxzoom = 14,
-- Instead of writing the tile list to a file, it can be written to a table.
-- The table will be created if it isn't there already.
table = 'lines_tiles',
-- schema = 'myschema', -- You can also set a database schema.
})
expire_outputs.polygons = osm2pgsql.define_expire_output({
-- You can also set a minimum zoom level in addition to the maximum zoom
-- level. Tiles in all zoom levels between those two will be written out.
minzoom = 10,
maxzoom = 14,
table = 'polygons_tiles'
})
print("Expire outputs:(")
for name, eo in pairs(expire_outputs) do
print(" " .. name
.. ": minzoom=" .. eo:minzoom()
.. " maxzoom=" .. eo:maxzoom()
.. " filename=" .. eo:filename()
.. " schema=" .. eo:schema()
.. " table=" .. eo:table())
end
print(")")
local tables = {}
tables.pois = osm2pgsql.define_node_table('pois', {
{ column = 'tags', type = 'jsonb' },
-- Zero, one or more expire outputs are referenced in an `expire` field in
-- the definition of any geometry column using the Web Mercator (3857)
-- projection.
{ column = 'geom', type = 'point', not_null = true, expire = {
{ output = expire_outputs.pois }
}},
})
tables.lines = osm2pgsql.define_way_table('lines', {
{ column = 'tags', type = 'jsonb' },
-- If you only have a single expire output and with the default
-- parameters, you can specify it directly.
{ column = 'geom', type = 'linestring', not_null = true, expire = expire_outputs.lines },
})
tables.polygons = osm2pgsql.define_area_table('polygons', {
{ column = 'tags', type = 'jsonb' },
-- In this configuration the `mode` of the expiry is set to `boundary-only`.
-- Other modes are `full-area` (default) and `hybrid`. If set to `hybrid`
-- you can set `full_area_limit` to a value in Web Mercator units. For
-- polygons where the width and height of the bounding box is below this
-- limit the full area is expired, for larger polygons only the boundary.
-- This setting doesn't have any effect on point or linestring geometries.
{ column = 'geom', type = 'geometry', not_null = true, expire = {
{ output = expire_outputs.polygons, mode = 'boundary-only' }
}}
})
tables.boundaries = osm2pgsql.define_relation_table('boundaries', {
{ column = 'type', type = 'text' },
{ column = 'tags', type = 'jsonb' },
-- This geometry column doesn't have an `expire` field, so no expiry is
-- done.
{ column = 'geom', type = 'multilinestring', not_null = true },
})
print("Tables:(")
for name, ts in pairs(tables) do
print(" " .. name .. ": name=" .. ts:name() .. " (" .. tostring(ts) .. ")")
end
print(")")
-- 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']
end
function osm2pgsql.process_node(object)
tables.pois:insert({
tags = object.tags,
geom = object:as_point()
})
end
function osm2pgsql.process_way(object)
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')
-- Store boundary relations as multilinestrings
if relation_type == 'boundary' then
tables.boundaries:insert({
type = object:grab_tag('boundary'),
tags = object.tags,
geom = object:as_multilinestring():line_merge()
})
return
end
-- Store multipolygon relations as polygons
if relation_type == 'multipolygon' then
tables.polygons:insert({
tags = object.tags,
geom = object:as_multipolygon()
})
end
end