我正在使用OpenstreetmapX.jl
库来计算到OSM网络的点之间的路由。
有没有任何方法可以获得这样的路由,将结果限制在预定义子网络的路径上?
例如,我想计算两点之间的路线,但仅使用次要道路。
有可能吗?
您很可能希望创建一个单独的MapData
对象来处理此类数据。有一个很好的工具osmfilter,可以在将数据导入Julia之前过滤掉特定的路由类型。通过这种方式,您可以对地图数据进行单独的表示。
但是,如果要直接对MapData
对象进行操作,可以将距离权重设置为Inf
,这将强制路由算法避免此类边或返回Inf
路由长度。
假设你有教程中的地图:
using OpenStreetMapX, Graphs
map_file_path = joinpath(dirname(pathof(OpenStreetMapX)),"..","test/data/reno_east3.osm")
mx = get_map_data(map_file_path, use_cache=false);
比你能做的过滤出次要路线:
m2 = deepcopy(mx)
edgs = collect(edges(mx.g))[findall(!=(4), mx.class)]
setindex!.(Ref(m2.w), Inf, src.(edgs), dst.(edgs))
现在所选的路线在mx
和m2
:之间会有所不同
julia> shortest_route(mx, 3073938243, 3101115892)
([3073938243, 3073938154, 140340636, 140340638, 3101117891, 3101115892], 549.9261168024648, 32.32592992211371)
julia> shortest_route(m2, 3073938243, 3101115892)
([3073938243, 140533189, 140533195, 3101115892], 617.4395184717641, 54.94654519330738)