我需要编辑 osmnx 以 geopackage 格式下载的数据,然后将其导入为图表以计算距离、等时线等。
当前流程:
- 使用 ox.graph_from_point 下载 osm 数据
- 使用 ox.io.save_graph_geopackage 保存到 Geopackage 边缘和节点,以允许用户通过数字化道路(使用捕捉)在 QGIS 中添加边缘、额外道路并保存编辑。
- 使用 ox.graph_from_gdfs 将编辑后的边转换回 OSMNX 作为图形。
此时 'ox.graph_from_gdfs' 返回一个空的 Graph 对象。它似乎抱怨 x 属性不存在,但 x 和 y 属性确实存在于地理包节点层中 - 所以我不明白这个错误。
Error:
coords = ((n, d["x"], d["y"]) for n, d in G.nodes(data=True))
KeyError: 'x'
有人可以帮忙吗?
Code:
import osmnx as ox
import networkx as nx
import geopandas as gpd
from shapely.geometry import Point, LineString, MultiLineString,Polygon,MultiPolygon
print("OX ver: {}".format(ox.__version__))
print("NX ver: {}".format(nx.__version__))
geopPath = "osmnx_roaddata.gpkg"
xG = -1.08762688688598
yG = 53.9547041755247
orig = (yG,xG)
print(orig)
gdf_edges = gpd.read_file(geopPath, layer='edges')
gdf_nodes = gpd.read_file(geopPath, layer='nodes')
## Test to see if x exists in geodataframe- looks fine
#for index, row in gdf_nodes.iterrows():
# print("y: {}. x: {}".format(row['y'],row['x']))
print("######## Using Existing geopackage road edges and nodes")
### readthedocs: graph_attrs (dict) – the new G.graph attribute dict; if None, add crs as the only graph-level attribute
## don't know what the graph attribute dict should contain...or if providing the crs object is what is expected...
G = ox.graph_from_gdfs(gdf_nodes,gdf_edges) #, graph_attrs=gdf_nodes.crs)
print("G appears empty....: '{}'".format(G))
origin_node = ox.get_nearest_node(G, orig)
print("Roads geopackage now being used as variable 'G' graph object")
我知道我可能需要计算已数字化的新道路的任何缺失节点。但我仍然应该能够使用“ox.graph_from_gdfs”创建一个有效的 G 图对象,我在遇到这个问题之前就想到了。我测试了另一个地理包,除了 osmnx 下载的道路或节点之外,没有其他道路或节点,并且结果相同。
使用 OSMnx 0.16.0、NetworkX 2.5。
地理路径地理包下载 https://drive.google.com/file/d/1Cx8DxmyPtn6L1JYsJ350BvNaPE2u5qIh/view?usp=sharing