我使用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
错误
两件事。首先,确保您使用的是最新版本的OSMnx,因为之前的版本中有显著的性能增强。第二,如果你先简化你的图表,这一切将会快得多
但更重要的是,除非您已经简化了图形,否则合并交点实际上没有意义,因为在未简化(扩展)的图形中,真实世界“交点”的概念毫无意义。只有在简化图形后,模型的节点才会映射到现实世界中的交叉点和死角概念。有关详细信息,请参阅文档和相关文献
下面是一个比较原始计时(左)和我的简化计时(右)的代码片段:
编辑:我刚刚重新运行了上面共享的代码片段,但是更改了
simplify=False
,并且我使用最新版本的计时仍然比您看到的要快得多。例如,上面最后两行代码分别在6m 20秒和12s内完成(与14m 45秒和44m 35秒计时相比)相关问题 更多 >
编程相关推荐