使用 osmnx 从多边形中检索数据

Retrieve data from a Polygon using osmnx

在问这个问题之前,我要展示一下我做了什么:

我正在使用 Pyhton 和我即将展示的包。

我想使用 osmnx 访问与葡萄牙大陆(西班牙旁边的部分,因此不包括岛屿)对应的数据:

import geopandas as gpd
import pandas as pd
from shapely.geometry import Point, LineString, Polygon
import networkx as nx
import osmnx as ox
import matplotlib.pyplot as plt
from descartes import PolygonPatch
from IPython.display import IFrame
ox.config(log_console=True, use_cache=True)

选择了地点。我得到了葡萄牙对应的MultiPolygon

place = 'Portugal'
G = ox.gdf_from_place(place)
fig, ax = ox.plot_shape(G, figsize=(17,17))

我只想要葡萄牙大陆,我的意思是这只是西班牙旁边的部分,不包括亚速尔群岛和马德拉群岛等岛屿。因此,我探索了 MultipPolygon 的几何形状。然后将所有的多边形按面积排序,选出面积最大的。

exploded_G = G.explode()
exploded_G['area'] = exploded_G.area
exploded_G.sort_values(by='area', inplace=True)
Portugal= exploded_G.iloc[-1]['geometry']

我的问题是:如何访问我现在拥有的多边形(我称之为葡萄牙的那个)的所有信息,例如兴趣点、道路、节点等。

提前致谢。

由于葡萄牙大陆涉及大量数据,因此非常耗时,我只是在其中一个较小的多边形上实施了以下步骤。因此,以下内容也适用于 'Portugal'。

exploded_gdf_place = gdf_place.explode()
exploded_gdf_place['area'] = exploded_gdf_place.area
exploded_gdf_place.sort_values(by='area', inplace=True)
smaller_area_Portugal= exploded_gdf_place.iloc[4]['geometry']

您可以使用OSMNx的graph_from polygon函数获取道路网络(例如驾车或步行网络)。

g = ox.graph_from_polygon(polygon = smaller_area_Portugal, network_type = 'drive')
fig, ax = ox.plot_graph(g, fig_height=5)

然后您可以获得与地理数据框相同的图形的节点和边的数据,如下所示。

gdf_nodes,gdf_edges = ox.graph_to_gdfs(g, nodes=True, edges=True)

要获取有关多边形内 POI 的数据,您应该使用以下方法。我没有指定任何特定的设施类型,但也可以这样做。参考文档。

gdf_pois = ox.pois.osm_poi_download(polygon=smaller_area_Portugal)

获取多边形内POI的示例如下。

sample_poi = gdf_pois['elements'][0]