OSmnx中将图形投影到espg:4326的最快方法

2024-06-28 20:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用OSmnx的osmnx.graph_project首先将我的图形投影到UTM坐标系上,以便使用consolidate_intersections函数,然后ox.project_graph(G_proj_ConsolidateIntersection, to_crs='epsg:4326')将其投影到经纬度坐标系上,以便使用ox.get_nearest_nodes。最后一次投影需要很长时间(5分钟),而第一次投影只需几秒钟。有没有更好更快的方法投影到epsg:4326上?我有looked at this answer但是当我执行这一行gdf = gpd.GeoDataFrame(geometry=intersections)时,我得到以下错误:

ValueError: Unknown column

下面是一个极端方面的例子(我正在绘制的图表较小,但我希望它能说明我的观点):

import osmnx as ox
G = ox.graph_from_place('Edmonton, Canada', network_type='drive', simplify=False)
# 39.1 s

G_proj = ox.project_graph(G)
# 15.9 s

G_proj_ConsolidateIntersection = ox.consolidate_intersections(G_proj)
# 14 min 45 s

G_proj_ConsolidateIntersection_LatLon = ox.project_graph(G_proj_ConsolidateIntersection, to_crs='epsg:4326')
# 44 min 35 s

另外gpd.GeoDataFrame(geometry=G_proj_ConsolidateIntersection)会引发Unknown column错误


Tags: toprojectepsggraphox投影proj坐标系
1条回答
网友
1楼 · 发布于 2024-06-28 20:19:15

两件事。首先,确保您使用的是最新版本的OSMnx,因为之前的版本中有显著的性能增强。第二,如果你先简化你的图表,这一切将会快得多

但更重要的是,除非您已经简化了图形,否则合并交点实际上没有意义,因为在未简化(扩展)的图形中,真实世界“交点”的概念毫无意义。只有在简化图形后,模型的节点才会映射到现实世界中的交叉点和死角概念。有关详细信息,请参阅文档和相关文献

下面是一个比较原始计时(左)和我的简化计时(右)的代码片段:

import osmnx as ox
ox.config(use_cache=True, log_console=True)

G = ox.graph_from_place('Edmonton, Canada', network_type='drive', simplify=True)
# 39.1 s vs 18.2 s

G_proj = ox.project_graph(G)
# 15.9 s vs 8.9 s

G_proj_con = ox.consolidate_intersections(G_proj)
# 14 m 45 s vs 24.2 s

G_con = ox.project_graph(G_proj_con, to_crs='epsg:4326')
# 44 m 35 s vs 6.4 s

编辑:我刚刚重新运行了上面共享的代码片段,但是更改了simplify=False,并且我使用最新版本的计时仍然比您看到的要快得多。例如,上面最后两行代码分别在6m 20秒和12s内完成(与14m 45秒和44m 35秒计时相比)

相关问题 更多 >