OSMnx graph_from_bbox()参数报错:提示仅接受1个位置参数但传入4个的问题排查
这个问题其实是OSMnx版本更新带来的参数格式变化导致的,我帮你一步步梳理清楚:
问题根源
从你贴出的help(ox.graph.graph_from_bbox)输出可以看到,当前你使用的OSMnx版本中,graph_from_bbox()函数的bbox参数是一个单独的元组/列表,格式要求是(left, bottom, right, top),而不是旧版本里的四个独立位置参数(north, south, east, west)。
你代码里用*bbox把元组(37.5, 32.0, -94.0, -104.0)拆成了四个单独的位置参数传入,这就导致函数收到了4个位置参数+1个关键字参数,和它预期的1个位置参数(bbox元组)不符,所以抛出了TypeError。
解决方案
去掉参数解包符
*
直接把整个bbox元组作为参数传入,不要用*拆分:# 原代码: # graph = ox.graph.graph_from_bbox(*bbox, network_type="drive") # 修改后: graph = ox.graph.graph_from_bbox(bbox, network_type="drive")修正bbox的顺序
注意你当前定义的bbox = (37.5, 32.0, -94.0, -104.0)是(north, south, east, west)的旧版顺序,但当前版本要求的是(left, bottom, right, top)(left=西经度,bottom=南纬度,right=东经度,top=北纬度),所以需要调整为:bbox = (-104.0, 32.0, -94.0, 37.5) # 对应left=-104.0, bottom=32.0, right=-94.0, top=37.5这样才能正确获取你想要的俄克拉荷马、德克萨斯、堪萨斯区域的路网。
额外说明
如果之前你参考的是旧版OSMnx的教程,确实会看到graph_from_bbox接受四个独立参数的写法,但新版本为了参数更简洁统一,改成了单个bbox元组参数。你可以通过ox.__version__查看当前使用的版本,确保和参考文档的版本匹配。
修改后的关键代码片段:
# 修正后的bbox顺序,符合当前版本要求 bbox = (-104.0, 32.0, -94.0, 37.5) # Approximate bounding box for OK, TX, KS # 直接传入bbox元组,不要用*解包 graph = ox.graph.graph_from_bbox(bbox, network_type="drive")
备注:内容来源于stack exchange,提问作者plditallo

