
OSMnx 2.0 版本起,graph_from_bbox() 不再接受解包的四个坐标值(如 *bbox),而是要求将边界框作为一个完整元组(格式为 (left, bottom, right, top))以单个位置参数传入,这是导致“takes 1 positional argument”报错的根本原因。
osmnx 2.0 版本起,`graph_from_bbox()` 不再接受解包的四个坐标值(如 `*bbox`),而是要求将边界框作为一个完整元组(格式为 `(left, bottom, right, top)`)以**单个位置参数**传入,这是导致“takes 1 positional argument”报错的根本原因。
在 OSMnx 2.0 及更高版本中,ox.graph.graph_from_bbox() 的签名已发生重大变更:它现在仅接受一个位置参数 bbox,该参数必须是形如 (left, bottom, right, top) 的四元元组(即 WGS84 经纬度坐标系下的西、南、东、北边界),而非此前版本支持的四个独立浮点数。这一调整统一了 API 设计风格,并与地理空间库(如 GeoPandas)的坐标顺序惯例保持一致。
✅ 正确用法(OSMnx ≥ 2.0)
import osmnx as ox # 注意:顺序是 (left, bottom, right, top) —— 即 (west, south, east, north) bbox = (-104.0, 32.0, -94.0, 37.5) # 西、南、东、北(非 north/south/east/west!) # ✅ 正确:传入单个元组 graph = ox.graph_from_bbox(bbox, network_type="drive") # ✅ 也可显式命名参数(更清晰、兼容性更好) graph = ox.graph_from_bbox(bbox=bbox, network_type="drive")
⚠️ 关键注意:
- 坐标顺序必须为
(left, bottom, right, top)(即west, south, east, north),而非旧文档或直觉中的(north, south, east, west);*bbox解包写法(如graph_from_bbox(*bbox, ...))在 OSMnx 2.0+ 中会触发TypeError,因其被解析为 4 个独立位置参数,而函数只声明接收 1 个;ox.graph.graph_from_bbox已被简化为ox.graph_from_bbox(推荐使用顶层函数,更稳定且符合官方文档惯例)。
❌ 常见错误示例及修复
# ❌ 错误:使用 * 解包 + 错误坐标顺序 bbox = (37.5, 32.0, -94.0, -104.0) # 顺序为 (north, south, east, west) graph = ox.graph_from_bbox(*bbox, network_type="drive") # TypeError! # ✅ 修复:先修正顺序,再直接传元组 bbox_correct = (-104.0, 32.0, -94.0, 37.5) # → (west, south, east, north) graph = ox.graph_from_bbox(bbox_correct, network_type="drive")
? 兼容旧版本(可选,不推荐)
若需同时支持 OSMnx
# ✅ 兼容写法(推荐用于迁移过渡期) graph = ox.graph_from_bbox(bbox=bbox, network_type="drive")
此写法在所有版本中均有效,且语义明确,强烈建议新项目直接采用。
? 补充说明
- 官方文档与
help(ox.graph_from_bbox)中描述的bbox参数类型为"Bounding box as (left, bottom, right, top)",正是对此变更的准确说明; - 使用前可通过
ox.__version__检查当前版本,确认行为一致性; - 若仍遇到
ImportError或函数未找到,请确保调用的是ox.graph_from_bbox(而非ox.graph.graph_from_bbox),后者在新版中已弃用。
遵循上述规范,即可彻底解决参数数量不匹配问题,并构建健壮、可维护的地理网络分析流程。










