使用Python的OSMNX包获取美国驾车路网报错是什么原因?
OSMNX获取美国全境路网报错原因解析
第一个报错原因(无Shapely几何对象)
运行代码:
import osmnx as ox EU1=ox.graph_from_place('United States', network_type='drive')
触发ValueError: No Shapely geometry can be created from null value的原因:
graph_from_place依赖OSM的Nominatim地理编码服务查询地名对应的边界几何,搜索「United States」时默认返回的第一条结果未携带有效可解析的面域几何,或是接口返回为空,无法生成Shapely对象触发报错。
第二个报错原因(几何类型不匹配)
调整后代码:
EU1=ox.graph_from_place('United States', network_type='drive', which_result=2)
触发TypeError: Geometry must be a shapely Polygon or MultiPolygon的原因:
- 指定
which_result=2后返回的第二条搜索结果,几何类型不符合OSMNX的要求,不是多边形或多面类型,可能是点、线等其他几何类型,未通过OSMNX的参数校验。
补充说明
美国全境的驾车路网数据量极大,直接请求全境数据本身就不现实,就算几何参数正确,也会大概率出现请求超时、内存溢出、OSM接口限流等问题。如果确实需要美国范围的路网,推荐两种方案:
- 按行政区分块拉取后合并:逐个拉取各州的路网,再使用
ox.compose_graphs函数合并为全图 - 过滤低等级道路减少数据量:通过
custom_filter参数仅保留高速、国道等高等级道路,降低请求和处理压力
内容的提问来源于stack exchange,提问作者Samir
相关产品推荐
相关产品推荐

