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

如何让NetworkX网络边权重对应GeoDataFrame线长度并找最远节点对

解决方法

你用momepy.gdf_to_nx(my_line, approach="primal", length='mm_len')转图时,已经把GeoDataFrame里的mm_len字段值作为每条边的length属性存储了——这就是你需要的实际米数权重。之前的代码问题在于没告诉Dijkstra算法要用这个权重,默认是按路径经过的节点数量计算的。

直接用带权重参数的NetworkX方法就能解决:

1. 计算所有节点对的实际最短路径长度

# 基于边的length属性(即mm_len的米数)计算所有节点对的最短路径长度
path_lengths = dict(nx.all_pairs_dijkstra_path_length(G, weight='length'))

# 遍历找出最大距离对应的节点对
max_distance = 0
start = None
end = None

for source, targets in path_lengths.items():
    for target, distance in targets.items():
        if distance > max_distance:
            max_distance = distance
            start = source
            end = target

print(f"最远节点对:{start} 到 {end},实际距离:{max_distance}米")

2. 如果需要获取具体路径

如果还想拿到这条最长路径的节点序列,再用指定权重的路径获取方法:

# 获取带权重的所有最短路径
all_paths = dict(nx.all_pairs_dijkstra_path(G, weight='length'))
# 提取最远节点对的路径
longest_path_nodes = all_paths[start][end]

这样得到的max_distance就是实际的米数长度,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:22:27