英文:
OSM routing on ferry lines
问题
我正在建立一个工具,旨在显示和存储公共交通出行信息。我目前已经实现了火车、公交和飞机出行的功能,现在想要添加渡轮。
对于公交,我目前使用OSRM。对于火车,我使用了一种自定义版本的OSRM,它使用轨道而不是道路。对于飞机,我只是在机场之间绘制大圆弧。
我在渡轮方面有点困惑。在开放街图上,它们被存储为relations或ways,但我不知道如何仅找到两点之间的部分。
有没有人有办法解决这个问题?
英文:
I am building a tool that aims to display and store public transport trips. I currently have train, bus and air travel working, and I would like to add ferry.
For Bus, I currently use the OSRM. For train, I use a custom version of the OSRM that uses tracks instead of roads. And for air, I simply plot a geodesic between the airports.
I am at a bit of a loss concerning the ferries. In OSM, they are stored as either relations or ways, but I don't know how I could find only the part between 2 points.
Would anyone have an idea of how to get this ?
答案1
得分: 0
api_version = 4
Set = require('lib/set')
Sequence = require('lib/sequence')
Handlers = require("lib/way_handlers")
function setup()
local ferry_speed = 30 -- ferry speed in km/h
return {
properties = {
weight_name = 'duration',
max_speed_for_map_matching = 30/3.6, -- kmph -> m/s
call_tagless_node_function = false,
use_turn_restrictions = false,
},
default_mode = mode.ferry,
default_speed = ferry_speed,
oneway_handling = 'ignore', -- allow traversal in both directions
-- Only allow ways tagged as ferry route
access_tag_whitelist = Set {
'ferry'
},
speeds = Sequence {
route = {
ferry = ferry_speed,
}
},
}
end
function process_node(profile, node, result)
-- empty, ferry routes are mainly defined by ways, not nodes
end
function process_way(profile, way, result)
-- only consider ways tagged with 'route=ferry'
local is_ferry = way:get_value_by_key('route')
if is_ferry == 'ferry' then
result.forward_mode = mode.ferry
result.backward_mode = mode.ferry
result.forward_speed = profile.default_speed
result.backward_speed = profile.default_speed
else
result.forward_mode = mode.inaccessible
result.backward_mode = mode.inaccessible
end
end
return {
setup = setup,
process_way = process_way,
process_node = process_node,
}
英文:
I ended up running another OSRM server with a ferry.lua like so :
api_version = 4
Set = require('lib/set')
Sequence = require('lib/sequence')
Handlers = require("lib/way_handlers")
function setup()
local ferry_speed = 30 -- ferry speed in km/h
return {
properties = {
weight_name = 'duration',
max_speed_for_map_matching = 30/3.6, -- kmph -> m/s
call_tagless_node_function = false,
use_turn_restrictions = false,
},
default_mode = mode.ferry,
default_speed = ferry_speed,
oneway_handling = 'ignore', -- allow traversal in both directions
-- Only allow ways tagged as ferry route
access_tag_whitelist = Set {
'ferry'
},
speeds = Sequence {
route = {
ferry = ferry_speed,
}
},
}
end
function process_node(profile, node, result)
-- empty, ferry routes are mainly defined by ways, not nodes
end
function process_way(profile, way, result)
-- only consider ways tagged with 'route=ferry'
local is_ferry = way:get_value_by_key('route')
if is_ferry == 'ferry' then
result.forward_mode = mode.ferry
result.backward_mode = mode.ferry
result.forward_speed = profile.default_speed
result.backward_speed = profile.default_speed
else
result.forward_mode = mode.inaccessible
result.backward_mode = mode.inaccessible
end
end
return {
setup = setup,
process_way = process_way,
process_node = process_node,
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论