Skip to content

Commit

Permalink
Merge improvements to multiline
Browse files Browse the repository at this point in the history
  • Loading branch information
rustprooflabs committed Aug 13, 2022
2 parents 313ac9b + 2364966 commit 3bf4c20
Show file tree
Hide file tree
Showing 10 changed files with 265 additions and 12 deletions.
21 changes: 20 additions & 1 deletion flex-config/style/public_transport.lua
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ tables.public_transport_line = osm2pgsql.define_table({
{ column = 'lit', type = 'text' },
{ column = 'wheelchair', type = 'text'},
{ column = 'wheelchair_desc', type = 'text'},
{ column = 'geom', type = 'linestring', projection = srid }
{ column = 'geom', type = 'multilinestring', projection = srid }
}
})

Expand Down Expand Up @@ -292,6 +292,25 @@ function public_transport_process_relation(object)
wheelchair_desc = wheelchair_desc,
geom = { create = 'area' }
})
else
tables.public_transport_line:add_row({
osm_type = osm_types.osm_type,
osm_subtype = osm_types.osm_subtype,
public_transport = public_transport,
name = name,
ref = ref,
operator = operator,
layer = layer,
network = network,
surface = surface,
bus = bus,
shelter = shelter,
bench = bench,
lit = lit,
wheelchair = wheelchair,
wheelchair_desc = wheelchair_desc,
geom = { create = 'line' }
})
end
end

Expand Down
81 changes: 80 additions & 1 deletion flex-config/style/road.lua
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ tables.road_line = osm2pgsql.define_table({
{ column = 'route_cycle', type = 'boolean' },
{ column = 'route_motor', type = 'boolean' },
{ column = 'access', type = 'text' },
{ column = 'geom', type = 'linestring', projection = srid }
{ column = 'geom', type = 'multilinestring', projection = srid }
}
})

Expand Down Expand Up @@ -168,6 +168,71 @@ function road_process_way(object)
end


function road_process_relation(object)
if not object.tags.highway then
return
end

local name = get_name(object.tags)
local route_foot = routable_foot(object.tags)
local route_cycle = routable_cycle(object.tags)
local route_motor = routable_motor(object.tags)

local osm_type = object.tags.highway
local ref = get_ref(object.tags)

-- in km/hr
local maxspeed = parse_speed(object.tags.maxspeed)

-- results in nil for reversible and alternating
local oneway = object.tags.oneway or 0

local major = major_road(osm_type)
local layer = parse_layer_value(object.tags.layer)
local tunnel = object.tags.tunnel
local bridge = object.tags.bridge
local access = object.tags.access

if object.tags.area == 'yes'
or object.tags.indoor == 'room'
then
tables.road_polygon:add_row({
name = name,
osm_type = osm_type,
ref = ref,
maxspeed = maxspeed,
major = major,
layer = layer,
tunnel = tunnel,
bridge = bridge,
route_foot = route_foot,
route_cycle = route_cycle,
route_motor = route_motor,
access = access,
geom = { create = 'area' }
})
else
tables.road_line:add_row({
name = name,
osm_type = osm_type,
ref = ref,
maxspeed = maxspeed,
oneway = oneway,
major = major,
layer = layer,
tunnel = tunnel,
bridge = bridge,
route_foot = route_foot,
route_cycle = route_cycle,
route_motor = route_motor,
access = access,
geom = { create = 'line' }
})
end

end


if osm2pgsql.process_node == nil then
-- Change function name here
osm2pgsql.process_node = road_process_node
Expand All @@ -194,3 +259,17 @@ else
road_process_way(object_copy)
end
end


if osm2pgsql.process_relation == nil then
osm2pgsql.process_relation = road_process_relation
else
local nested = osm2pgsql.process_relation
osm2pgsql.process_relation = function(object)
local object_copy = deep_copy(object)
nested(object)
-- Change function name here
road_process_relation(object_copy)
end

end
57 changes: 56 additions & 1 deletion flex-config/style/road_major.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ tables.road_major = osm2pgsql.define_table({
{ column = 'tunnel', type = 'text' },
{ column = 'bridge', type = 'text' },
{ column = 'major', type = 'boolean', not_null = true},
{ column = 'geom', type = 'linestring', projection = srid },
{ column = 'geom', type = 'multilinestring', projection = srid },
}
})

Expand Down Expand Up @@ -56,6 +56,46 @@ function road_major_process_way(object)
end


function road_major_process_relation(object)
if not object.tags.highway then
return
end

if not major_road(object.tags.highway) then
return
end

local major = true

local name = get_name(object.tags)
local osm_type = object.tags.highway
local ref = get_ref(object.tags)

-- in km/hr
local maxspeed = parse_speed(object.tags.maxspeed)

-- results in nil for reversible and alternating
local oneway = object.tags.oneway or 0

local layer = parse_layer_value(object.tags.layer)
local tunnel = object.tags.tunnel
local bridge = object.tags.bridge
local access = object.tags.access

tables.road_major:add_row({
name = name,
osm_type = osm_type,
ref = ref,
maxspeed = maxspeed,
major = major,
layer = layer,
tunnel = tunnel,
bridge = bridge,
geom = { create = 'line' }
})

end

if osm2pgsql.process_way == nil then
osm2pgsql.process_way = road_major_process_way
else
Expand All @@ -66,3 +106,18 @@ else
road_major_process_way(object_copy)
end
end



if osm2pgsql.process_relation == nil then
osm2pgsql.process_relation = road_major_process_relation
else
local nested = osm2pgsql.process_relation
osm2pgsql.process_relation = function(object)
local object_copy = deep_copy(object)
nested(object)
-- Change function name here
road_major_process_relation(object_copy)
end

end
100 changes: 99 additions & 1 deletion flex-config/style/water.lua
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ tables.water_line = osm2pgsql.define_table({
{ column = 'tunnel', type = 'text' },
{ column = 'bridge', type = 'text' },
{ column = 'boat', type = 'text' },
{ column = 'geom', type = 'linestring' , projection = srid},
{ column = 'geom', type = 'multilinestring' , projection = srid},
}
})

Expand Down Expand Up @@ -197,6 +197,92 @@ function water_process_way(object)

end

end


function water_process_relation(object)
if not object.tags.natural
and not object.tags.waterway then
return
end

if object.tags.natural == 'water'
or object.tags.natural == 'lake'
or object.tags.natural == 'hot_spring'
or object.tags.natural == 'waterfall'
or object.tags.natural == 'wetland'
or object.tags.natural == 'swamp'
or object.tags.natural == 'water_meadow'
or object.tags.natural == 'waterway'
or object.tags.natural == 'spring'
then
local osm_type = 'natural'
local osm_subtype = object:grab_tag('natural')
local name = get_name(object.tags)
local layer = parse_layer_value(object.tags.layer)
local tunnel = object:grab_tag('tunnel')
local bridge = object:grab_tag('bridge')
local boat = object:grab_tag('boat')

if object.tags.type == 'multipolygon' then
tables.water_polygon:add_row({
osm_type = osm_type,
osm_subtype = osm_subtype,
name = name,
layer = layer,
tunnel = tunnel,
bridge = bridge,
boat = boat,
geom = { create = 'area' }
})
else
tables.water_line:add_row({
osm_type = osm_type,
osm_subtype = osm_subtype,
name = name,
layer = layer,
tunnel = tunnel,
bridge = bridge,
boat = boat,
geom = { create = 'line' }
})
end

elseif object.tags.waterway then
local osm_type = 'waterway'
local osm_subtype = object:grab_tag('waterway')
local name = get_name(object.tags)
local layer = parse_layer_value(object.tags.layer)
local tunnel = object:grab_tag('tunnel')
local bridge = object:grab_tag('bridge')
local boat = object:grab_tag('boat')

if object.tags.type == 'multipolygon' then
tables.water_polygon:add_row({
osm_type = osm_type,
osm_subtype = osm_subtype,
name = name,
layer = layer,
tunnel = tunnel,
bridge = bridge,
boat = boat,
geom = { create = 'area' }
})
else
tables.water_line:add_row({
osm_type = osm_type,
osm_subtype = osm_subtype,
name = name,
layer = layer,
tunnel = tunnel,
bridge = bridge,
boat = boat,
geom = { create = 'line' }
})
end

end


end

Expand Down Expand Up @@ -228,3 +314,15 @@ else
water_process_way(object_copy)
end
end


if osm2pgsql.process_relation == nil then
osm2pgsql.process_relation = water_process_relation
else
local nested = osm2pgsql.process_relation
osm2pgsql.process_relation = function(object)
local object_copy = deep_copy(object)
nested(object)
water_process_relation(object_copy)
end
end
1 change: 1 addition & 0 deletions tests/expected/public_transport_line_osm_type_count.out
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
aerialway|animal_crossing|1
railway|abandoned|31
railway|disused|22
railway|facility|18
railway|light_rail|2
railway|rail|512
railway|subway|225
Expand Down
2 changes: 1 addition & 1 deletion tests/expected/road_line_aggregates.out
Original file line number Diff line number Diff line change
@@ -1 +1 @@
34634|1139|6880|26064|22080|24424
34645|1139|6880|26075|22080|24424
4 changes: 2 additions & 2 deletions tests/expected/road_line_osm_type_count.out
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
construction|7
cycleway|259
elevator|1
footway|7381
footway|7383
living_street|24
motorway|476
motorway_link|401
path|551
pedestrian|38
pedestrian|47
primary|2549
primary_link|264
proposed|11
Expand Down
5 changes: 3 additions & 2 deletions tests/expected/road_polygon_osm_type_count.out
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
bridleway|1
elevator|3
footway|25
footway|29
living_street|1
pedestrian|55
pedestrian|76
service|1
services|1
steps|1
4 changes: 2 additions & 2 deletions tests/expected/water_line_osm_type_subtype_count.out
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
waterway|canal|15
waterway|canal|16
waterway|dam|2
waterway|derelict_canal|2
waterway|ditch|5
waterway|drain|2
waterway|river|13
waterway|river|16
waterway|stream|113
waterway|weir|2
2 changes: 1 addition & 1 deletion tests/expected/water_polygon_osm_type_subtype_count.out
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
natural|water|260
natural|water|274
natural|wetland|13
waterway|dock|2
waterway|riverbank|5
Expand Down

0 comments on commit 3bf4c20

Please sign in to comment.