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

OSMnx经纬度查找最近节点异常及Norfolk Tide铁路路线问题

问题分析与解决建议

核心错误1:坐标参数顺序搞反了

OSMnx的nearest_nodes函数中,X参数对应经度,Y参数对应纬度,你现在把纬度传给了X,经度传给了Y,导致两个原本不同的位置被错误映射到了同一个节点。

核心错误2:路网类型选错了

你要模拟的是Tide铁路系统,但代码里用了network_type="drive"(驾驶路网),铁路和公路的节点、路线完全不重合,这必然导致路线和预期站点偏差极大。应该加载铁路路网。

修正后的代码

1. 正确获取铁路节点

import osmnx as ox
import networkx as nx

# 指定加载铁路路网,用custom_filter筛选铁路线路
place = "Norfolk, VA, USA"
# 自定义筛选条件,获取铁路相关路网
rail_filter = '["railway"~"rail"]'
G = ox.graph_from_place(place, custom_filter=rail_filter)

# 注意参数顺序:X=经度,Y=纬度
node1 = ox.distance.nearest_nodes(G, X=-76.3035083, Y=36.8586733)
node2 = ox.distance.nearest_nodes(G, X=-76.2938900, Y=36.8535711)
print(node1)
print(node2)

2. 正确绘制铁路路线

import osmnx as ox
import networkx as nx

# 加载铁路路网
rail_filter = '["railway"~"rail"]'
G = ox.graph_from_place("Norfolk, Virginia, USA", custom_filter=rail_filter)

# 正确传入经纬度顺序:X=经度,Y=纬度
orig = ox.distance.nearest_nodes(G, X=-76.3035083, Y=36.8586733)
dest = ox.distance.nearest_nodes(G, X=-76.2938900, Y=36.8535711)

# 计算最短路径(铁路路网用"length"作为权重没问题)
route = ox.routing.shortest_path(G, orig, dest, weight="length")
# 绘制路线,隐藏节点
fig, ax = ox.plot.plot_graph_route(G, route, node_size=0)

补充说明

  • 如果需要精准匹配Tide轻轨线路,可以调整custom_filter,比如加上["name"~"Tide"]来筛选特定线路(需确认OpenStreetMap中的线路命名是否匹配)。
  • 可以先用ox.plot_graph(G)查看加载的铁路路网是否符合预期,再进行后续的节点匹配和路线计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:21:00