python - 使用 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']
我的问题是:如何访问我现在拥有的多边形(我称之为葡萄牙的那个)的所有信息,例如兴趣点、道路、节点等。
先感谢您。
解决方案
由于葡萄牙大陆涉及大量数据,因此非常耗时,我只是在其中一个较小的多边形上实施了以下步骤。因此,以下内容也应该适用于“葡萄牙”。
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]
推荐阅读
- javascript - (中间值)(中间值)不是异步中的函数
- python - Problems with Numpy.where function and syntax
- android-studio - Android Studio:初始化共享首选项崩溃活动启动
- android - 是否可以从运行在主机上的 Android Studio 在 Virtual Box 下的 Android VM 上测试 android 应用程序
- python-3.x - 用漂亮的汤刮网
- python - 线性回归系数如何存储在 Sklearn 管道中?
- html - 使用命令行工具修改 etherpad 实例
- sql - 更新不连续/跳过 Id 表中的特定列
- xamarin.forms - 如何在 Xamarin Forms 自定义 PickerRenderer 中隐藏滚动条
- rx-swift - RxSwift subscribeOn 和 observeOn 不在预期的后台线程上