You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenstreetmapX.jl路由计算能否限定使用预定义子网路径?

OpenstreetmapX.jl限定路由计算子网范围的实现方案

OpenstreetmapX.jl 完全支持将路由计算范围限定在预定义子网内,你提到的仅允许secondary roadways类型道路通行的需求可以直接通过库自带功能实现,不需要修改库源码。

实现方式

你可以任选以下两种方案,效果一致:

  • 方案1:导入阶段过滤构建独立子网
    • 导入OSM数据时直接传入道路类型筛选参数,只拉取你需要的secondary类道路数据,排除其他等级道路
    • 基于筛选后的数据集单独构建路由拓扑图,此时生成的图结构本身就只包含允许通行的路段,属于你需要的预定义子网
    • 后续所有路由计算直接在这个子网上运行即可,结果天然不会包含非允许类型的道路
  • 方案2:全量路网下修改边权重实现通行限制
    • 如果已经加载了全量路网,不需要重新导入数据,直接修改路由计算的权重矩阵即可:将所有非secondary类型道路对应的边权重设置为Inf(无穷大)
    • 路由算法寻路时会自动跳过权重无穷大的不可通行边,最终输出的路径同样只会走允许的secondary道路

注意:不要在全量路网上跑完路由再事后过滤路径里的非允许道路,这种方式会因为寻路阶段就纳入了禁行路段,大概率得到不符合约束的错误结果。

参考代码示例

using OpenstreetmapX

# 导入OSM数据,仅保留secondary类道路
osm_dataset = get_osm_data("local_map.osm", roadways=("secondary",))
# 基于筛选后的道路构建子网拓扑
subnet_graph, node_map, edge_map = build_graph(osm_dataset)
# 匹配起终点坐标到子网内的对应节点
start_node = nearest_node(start_longitude, start_latitude, node_map)
end_node = nearest_node(end_longitude, end_latitude, node_map)
# 在子网内计算最短路径
result_route = shortest_path(subnet_graph, start_node, end_node)

如果你的场景里需要允许secondary道路的连接匝道、辅路等附属路段通行,只要在导入数据的roadways参数里追加对应道路类型标签即可,避免出现路网断连导致算不出路径的问题。

内容的提问来源于stack exchange,提问作者Miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:57:23