如何在OSMnx中将建筑物作为节点添加到图中?
用OSMnx创建包含建筑物中心节点与街道节点的图
你当前的代码是绘制建筑物的多边形轮廓和街道网络,要实现显示每个建筑物的中心节点,只需要计算建筑物的质心(中心坐标),再将这些质心作为节点叠加到街道图上即可。
修改后的完整代码
import osmnx as ox import matplotlib.pyplot as plt # 定义目标区域 place = "Piedmont, California, US" # 获取街道网络图 G = ox.graph_from_place(place) # 获取所有建筑物的地理数据 tags = {'building': True} buildings = ox.geometries_from_place(place, tags) # 计算每个建筑物的质心(中心坐标) buildings['centroid'] = buildings.geometry.centroid # 提取质心的x、y坐标 centroid_x = buildings['centroid'].x centroid_y = buildings['centroid'].y # 绘制街道网络,保留轴对象以便叠加绘制 fig, ax = ox.plot_graph(G, node_size=10, edge_color="w", edge_linewidth=0.7, show=False) # 在同一轴上绘制建筑物中心节点 ax.scatter(centroid_x, centroid_y, s=15, c='#ff4444', alpha=0.8, label='建筑物中心') # 添加图例并显示图形 ax.legend() plt.show()
关键说明
- 计算建筑物质心:通过GeoDataFrame的
centroid方法直接获取每个建筑物几何图形的中心坐标,无论建筑物是单一多边形还是复合多边形(MultiPolygon)都能处理。 - 叠加绘制:先绘制街道网络时设置
show=False保留绘图轴,再用matplotlib的scatter函数在同一轴上绘制建筑物中心节点,可自定义节点大小、颜色和透明度。 - 简化导入:移除了原代码中未用到的库,保持代码简洁。
内容的提问来源于stack exchange,提问作者user1560499
相关产品推荐
相关产品推荐

