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

Python OSmnx中将图形投影到espg:4326的最快方法,python,osmnx,Python,Osmnx,我使用了OSmnx的OSmnx.graph\u项目,首先将我的图形投影到UTM坐标系上,以便使用合并交点功能,然后使用ox.project\u graphG\u proj\u合并接口,将其投影到经纬度坐标系上,以便使用ox.get\u最近的节点。最后一次投影耗时5分钟,而第一次投影只需几秒钟。有没有更好更快的方法投影到epsg:4326上?但当我执行这行gdf=gpd.GeoDataFramegeometry=crosss时,我得到以下错误: ValueError:未知列 下面是一个极端的例子,

我使用了OSmnx的OSmnx.graph\u项目,首先将我的图形投影到UTM坐标系上,以便使用合并交点功能,然后使用ox.project\u graphG\u proj\u合并接口,将其投影到经纬度坐标系上,以便使用ox.get\u最近的节点。最后一次投影耗时5分钟,而第一次投影只需几秒钟。有没有更好更快的方法投影到epsg:4326上?但当我执行这行gdf=gpd.GeoDataFramegeometry=crosss时,我得到以下错误:

ValueError:未知列 下面是一个极端的例子,我正在绘制的图较小,但我希望它能说明我的观点:

将osmnx作为ox导入 G=ox.graph\u来自加拿大埃德蒙顿市,网络类型='drive',simplify=False 39.1 s G_proj=ox.project_graphG 15.9秒 G_项目整合区间=ox.consolidate交叉G_项目 14分45秒 G_proj_ConsolidateIntersection_LatLon=ox.project_graphG_proj_ConsolidateIntersection,to_crs='epsg:4326' 44分35秒
此外,gpd.GeoDataFramegeometry=G_proj_ConsolidateIntersection会引发未知列错误。

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

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

下面是一段代码片段,比较您原来的左侧计时与我的右侧简化计时:

将osmnx作为ox导入 ox.configuse\u cache=True,log\u console=True G=ox.graph\u来自加拿大埃德蒙顿市,网络类型为驱动器,simplify=True 39.1秒对18.2秒 G_proj=ox.project_graphG 15.9秒对8.9秒 G_项目=ox.consolidate_交叉G_项目 14米45秒对24.2秒 G_con=ox.project_graphG_proj_con,to_crs='epsg:4326' 44米35秒对6.4秒
编辑:我刚刚重新运行了上面共享的代码段,但将simplify=False更改为simplify,并且我使用最新版本的计时仍然比您看到的要快得多。例如,与您的14m 45s和44m 35s计时相比,上述最后两行代码分别在6m 20s和12s内完成。

请提供一个完整的最小重复性示例,我来看看。@gboeing刚刚用一个示例更新了问题。如果您需要更多信息,请告诉我。谢谢您的详细回答。我使用的是0.13.0版。我将更新包并检查性能。我首先传入simplify=False的原因是因为我想将具有曲率的街道分割成更多的部分,而这一点在simplify=True中丢失了:最后移除新边之间的所有间隙节点G。使用合并交点从setall_节点移除_节点到_移除,然后有助于清理新边交叉点,同时在交叉点之间保留更多节点。如果有其他方法可以实现这一点,请告诉我。我使用版本0.14.1运行代码,速度要快得多。在我目前正在工作的图表上,过去运行ox.consolidation_intersectionsG_proj需要5分钟,现在不到2分钟。将其投影到epsg:4326也需要9秒。新的更新快多了。很高兴听到这个消息。