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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:57:37