使用子网络的OpenstreetmapX.jl路由



我正在使用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))

现在所选的路线在mxm2:之间会有所不同

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)

最新更新