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
相关产品推荐
相关产品推荐

