You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OSMnx简化路网后,如何保留几何信息并导出为.osm格式?

OSMnx简化路网后导出.osm保留精确几何的解决方案

我在使用OSMnx下载并简化道路网络时遇到了问题:简化后的路网无法保留路段的精确几何/地理空间信息。从图结构绘制出的路网是简化后的样式,但将同一网络转换为GeoDataFrame后,该GeoDataFrame却包含路段的精确LineString。我希望将已下载并简化好的道路网络保存为.osm格式,同时保留这些路段的几何/地理空间信息。尝试保存带原始地理空间信息的路网为.osm格式时,简化后的网络存成.osm或graphml格式就丢失了这些信息,但存成.gpkg格式却能保留原始LineString。


核心原因

OSMnx的路网简化过程会合并冗余节点,默认导出.osm/.graphml时,会基于合并后的节点坐标重构路段几何,而非保留原始的精确LineString;但转成GeoDataFrame时,会完整保留原始路段的几何信息。

解决方案一:更新图的边几何属性后导出.osm

通过将GeoDataFrame中的精确几何写回图的边属性,再导出.osm即可保留信息:

import osmnx as ox

# 1. 获取并简化路网(示例)
G_simplified = ox.graph_from_place("北京市海淀区", network_type="drive", simplify=True)

# 2. 将简化图转为边的GeoDataFrame,这里包含精确的LineString
gdf_edges = ox.graph_to_gdfs(G_simplified, nodes=False, edges=True)

# 3. 将GeoDataFrame中的几何更新回图的边属性
for u, v, key, data in G_simplified.edges(data=True, keys=True):
    data["geometry"] = gdf_edges.loc[(u, v, key), "geometry"]

# 4. 导出带精确几何的.osm文件
ox.save_graph_osm(G_simplified, filepath="./simplified_road_network.osm")

解决方案二:通过GPkg中转转换为.osm

利用GDAL的ogr2ogr工具,先将保留几何的GPkg文件转为.osm:

  1. 先保存简化图为GPkg(已确认能保留精确几何):
ox.save_graph_geopackage(G_simplified, filepath="./simplified_road_network.gpkg")
  1. 执行GDAL命令行转换:
ogr2ogr -f "OSM" ./simplified_road_network.osm ./simplified_road_network.gpkg edges

注意事项

  • 确保使用OSMnx 0.16及以上版本,旧版本可能存在属性处理的bug
  • 若导出的.osm仍有问题,可检查GeoDataFrame中的geometry列是否确实为原始精确LineString

内容的提问来源于stack exchange,提问作者Nasir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:15:39