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

OSMNX间歇性无法获取路网问题求助

OSMNX间歇性无法获取路网的故障分析与解决建议

问题背景

使用OSMNX已有两年,近期间歇性出现无法获取路网的错误,运行环境为Windows虚拟机,配置的Overpass端点为https://overpass-api.de/api/interpreter。

示例代码

import osmnx as ox
from shapely.geometry import Polygon

polygon_coords = [
    (-74.0358, 40.7499), 
    (-74.0358, 40.7351), 
    (-74.0238, 40.7351), 
    (-74.0238, 40.7499),
    (-74.0358, 40.7499)  
]
polygon = Polygon(polygon_coords)

G=  ox.graph_from_polygon(polygon, network_type='drive',simplify=False)

错误信息

ConnectionResetError: [WinError 10054] 远程主机强制关闭了现有连接
ProtocolError: ('Connection aborted.', ConnectionResetError(10054, '远程主机强制关闭了现有连接', None, 10054, None))
ConnectionError: ('Connection aborted.', ConnectionResetError(10054, '远程主机强制关闭了现有连接', None, 10054, None))

故障原因分析

  • Overpass公共服务器限流/负载过高:overpass-api.de是免费公共服务,高峰期服务器负载大时会主动断开部分连接,导致间歇性失败。
  • 网络环境不稳定:Windows虚拟机的防火墙/安全软件可能间歇性拦截出站请求;组织网络的流量管控策略(如超时设置、带宽限制)也可能导致连接被强制中断;虚拟机本身的网络链路存在丢包、波动问题。
  • 请求配置不合理:OSMNX默认的超时时间过短,或请求频率过高触发服务器的防御机制,引发连接重置。

解决建议

  • 更换Overpass端点:尝试使用其他公共Overpass端点,通过ox.config(overpass_endpoint="新端点URL")配置;若组织有条件,搭建私有Overpass实例可彻底避免公共服务的限流问题。
  • 添加重试机制:在代码中实现自动重试逻辑,捕获连接错误后重试,示例如下:
import osmnx as ox
from shapely.geometry import Polygon
from tenacity import retry, stop_after_attempt, wait_exponential

polygon_coords = [
    (-74.0358, 40.7499), 
    (-74.0358, 40.7351), 
    (-74.0238, 40.7351), 
    (-74.0238, 40.7499),
    (-74.0358, 40.7499)  
]
polygon = Polygon(polygon_coords)

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def fetch_road_network():
    return ox.graph_from_polygon(polygon, network_type='drive', simplify=False)

try:
    G = fetch_road_network()
except Exception as e:
    print(f"3次重试后仍失败: {str(e)}")
  • 调整请求参数:延长请求超时时间,执行ox.config(timeout=60)将超时设置为60秒;批量请求时增加间隔时间,避免短时间内发送过多请求。
  • 排查网络配置:检查Windows虚拟机的防火墙规则,确保允许访问Overpass端点;联系组织IT确认是否需要将Overpass服务器加入网络白名单;通过ping overpass-api.de或curl命令持续测试虚拟机的网络连通性。
  • 启用本地缓存:开启OSMNX的缓存功能,执行ox.config(use_cache=True),重复请求相同区域时直接读取本地缓存,减少对服务器的依赖,同时提升请求效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:47:23