首页 > 解决方案 > 使用 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']

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

先感谢您。

标签: pythonpython-3.xpolygonosmnx

解决方案


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

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]

推荐阅读