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

如何查询节点间步行时间?Graph.jl/OSMX.jl等路由包功能咨询

关于Julia路由包获取步行时间/距离的解答

1. 步行相关权重的支持情况

  • OSMX.jl:默认加载的map.w确实对应驾车相关的道路距离,不过它支持加载步行专用权重。调用get_map时指定weight_type=:walk,就能获取步行属性的权重数据。
  • Graph.jl:作为通用图结构库,本身不内置路由权重,但可以结合OSMX.jl等工具获取的步行数据,自定义步行权重进行计算。

2. 获取节点i到j的步行距离/时间

方法一:通过OSMX.jl直接加载步行权重

using OSMX
# 加载包含步行权重的地图
map = get_map("目标区域范围"; weight_type=:walk)
# map.w 此时存储的是步行距离(单位:米)
# 若要计算时间,可结合步行速度换算(比如默认步行速度取5km/h,约1.39m/s)
walk_speed = 1.39  # 单位:米/秒
edge_walk_time = map.w ./ walk_speed  # 得到每条边的步行时间(秒)

方法二:自定义步行权重并计算路径

如果需要更精准的步行时间(比如区分人行道、小路等道路类型),可以基于OSMX的原始数据自定义权重:

using OSMX, Graphs, Geodesy
# 加载原始OSM数据
osm_data = get_osm("目标区域范围")
# 构建有向图
g = SimpleDiGraph(length(osm_data.nodes))
# 初始化权重字典
walk_time_weights = Dict{Tuple{Int,Int}, Float64}()

# 遍历所有道路边,计算步行时间
for way in osm_data.ways
    haskey(way.tags, "highway") || continue
    # 根据道路类型设置步行速度(单位:米/秒)
    speed = if way.tags["highway"] == "footway"
        1.39  # 对应5km/h
    elseif way.tags["highway"] == "path"
        1.11  # 对应4km/h
    else
        0.83  # 对应3km/h,适用于普通道路步行
    end
    # 计算边的实际长度(利用Geodesy计算球面距离)
    node_ids = way.nodes
    total_length = 0.0
    for k in 1:length(node_ids)-1
        node1 = osm_data.nodes[node_ids[k]]
        node2 = osm_data.nodes[node_ids[k+1]]
        # 经纬度转坐标点,计算距离
        coord1 = LatLon(node1.lat, node1.lon)
        coord2 = LatLon(node2.lat, node2.lon)
        total_length += distance(coord1, coord2)
    end
    # 计算该边的步行时间
    walk_time = total_length / speed
    # 向图中添加边并记录权重
    u, v = node_ids[1], node_ids[end]
    add_edge!(g, u, v)
    walk_time_weights[(u, v)] = walk_time
end

# 使用Dijkstra算法计算节点i到j的最短步行时间
using Graphs.ShortestPaths
dijkstra_result = dijkstra_shortest_paths(g, i; weights=walk_time_weights)
walk_time_i_to_j = dijkstra_result.dists[j]

3. 其他可选路由包

  • OpenStreetMapX.jl:比OSMX.jl更专注于OSM路由场景,内置步行、驾车、公交等多种权重类型,可直接调用接口计算节点间的步行距离和时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:03