Python 尝试使用OSMnx在同一图形中绘制两个或多个基础结构

Python 尝试使用OSMnx在同一图形中绘制两个或多个基础结构,python,plot,openstreetmap,networkx,Python,Plot,Openstreetmap,Networkx,我正在尝试使用OSMnx在同一个图中绘制多个基础设施网络(例如街道、铁路和建筑物),但没有真正取得成功 这是我的一个尝试: import osmnx as ox dist = 2000 point = (41.877092, -87.628) north, south, east, west = ox.bbox_from_point(point, distance=dist) bbox_proj = ox.bbox_from_point(point, dist, project_utm=True

我正在尝试使用OSMnx在同一个图中绘制多个基础设施网络(例如街道、铁路和建筑物),但没有真正取得成功

这是我的一个尝试:

import osmnx as ox
dist = 2000
point = (41.877092, -87.628)
north, south, east, west = ox.bbox_from_point(point, distance=dist)
bbox_proj = ox.bbox_from_point(point, dist, project_utm=True)
streets = ox.core.osm_net_download(
    north=north,
    south=south,
    east=east,
    west=west,
    infrastructure='way["highway"]'
    )
railways = ox.core.osm_net_download(
    north=north,
    south=south,
    east=east,
    west=west,
    infrastructure='way["railway"]'
    )
buildings = ox.core.osm_net_download(
    north=north,
    south=south,
    east=east,
    west=west,
    infrastructure='way["building"]'
    )
streets[0]['elements'] = streets[0]['elements'] + railways[0]['elements'] + buildings[0]['elements']
net = streets
G = ox.core.create_graph(net)
G = ox.truncate_graph_bbox(G, north, south, east, west, truncate_by_edge=True)
G = ox.project_graph(G)
_, _ = ox.plot.plot_graph(G, bbox=bbox_proj, fig_height=10, node_size=0, edge_color='black', edge_linewidth=0.5, save=True)
本规范的结果仅绘制了前2个基础设施、街道和铁路,但未绘制建筑物:

ox.plot\u figure\u地面的结果(仅绘制街道基础设施):

尽管未打印,但仍在下载建筑物数据(我知道打印建筑物,但我不想要彩色建筑物,只需要线条)

在此之前,我试图找到一种方法,在
infrastructure
参数中一次添加多个过滤器。比如:

nets = ox.core.osm_net_download(
    north=north,
    south=south,
    east=east,
    west=west,
    infrastructure='way["highway"],way["railway"],way["buildings"]'
    )
但不确定这是否可行


有没有办法在一个图形中绘制两个以上的建筑,如果可能的话,可以在OSMnx中简洁地绘制?

尝试将
建筑
替换为
建筑
。正确的OSM键末尾没有“s”。事实上,大多数OSM键都是单数键。

是的,这是可能的,这将简洁地做到:

导入matplotlib.pyplot作为plt
将networkx导入为nx
将osmnx作为ox导入
ox.config(使用缓存=True,日志控制台=True)
#获取不同基础结构类型的图表,然后进行组合
地点='美国加利福尼亚州伯克利'
G1=ox.graph\u from\u place(place,自定义过滤器='[“公路”~“住宅”])
G2=ox.graph\u from\u place(place,自定义\u过滤器='[“railway”~“rail”])
G=nx.组合(G1,G2)
#获得建筑足迹
fp=ox.footprints\u从\u地点(地点)
#用黄色标出公路边缘,用红色标出铁路边缘
ec=['y'如果d中的'highway'为'r'则G.边中的u,u,u,d为'r'(keys=True,data=True)]
图,ax=ox.plot\u图(G,bgcolor='k',edge\u color=ec,
节点大小=0,边线宽=0.5,
显示=错误,关闭=错误)
#添加不透明度为50%的白色建筑示意图
fp.绘图(ax=ax,color='w',alpha=0.5)
plt.show()


另请参见和

是的,我试过了。当我试图使代码更有条理地回答这个问题时,只是一个输入错误。谢谢你!