python - 使用 PYROSM 迭代和附加每个多边形的节点和边
问题描述
我想使用 PYROSM 对 ~1000 点进行可访问性分析。使用https://pyrosm.readthedocs.io/en/latest/graphs.html上的示例,我知道该怎么做。
问题在于,为大约是美国德克萨斯州两倍大小的感兴趣区域加载 OSM 数据(节点和边)似乎需要很长时间。因此,我现在尝试使用边界框遍历德克萨斯州的每个自治市(德克萨斯州有 254 个自治市),并将该边界框中的节点和边附加到节点和边的主列表中。但是,当仅在墨西哥的 2 个城市尝试我的方法时,这似乎也永远加载,而墨西哥的 .PBF 文件“只有”450MB。因此,似乎迭代和追加不是要走的路。我做错了什么吗?
我一直在考虑直接从https://extract.bbbike.org/下载 .PBF ,但这似乎仍然是一个非常漫长的过程。
我的代码:
import pyrosm
from pyrosm import get_data
from pyrosm import OSM
from pathlib import Path
import geopandas as gpd
# Load shapeefile with ADM2 data of Texas (USA), Mexico and Belgium.
ROI_adm2 = gpd.read_file(directory / "ADM" / "ROI.shp")
# What are the possible ROI's?
countries = pyrosm.data.available
#Downloading the OSM data per ADM2
NODES = []
EDGES = []
# Load OSM for Texas, Mexico (downloaded from geofabrik.de) and Belgium.
OSM_Mexico = str(directory / "mexico-latest.osm.pbf")
OSM_Texas = get_data('texas')
OSM_Belgium = get_data('belgium')
for index, row in ROI_adm2[:2].iterrows():
boundingBox = row['geometry']
country = row['NAME_0']
if country == "Mexico":
OSM_roi = OSM(OSM_Mexico, bounding_box = boundingBox)
if country == 'Belgium':
OSM_roi = OSM(OSM_Belgium, bounding_box = boundingBox)
if country == 'Texas':
OSM_roi = OSM(OSM_Texas, bounding_box = boundingBox)
nodes, edges = OSM_roi.get_network(network_type="driving", nodes = True)
NODES = NODES.append(nodes)
EDGES = EDGES.append(edges)
解决方案
推荐阅读
- java - 关于如何在读取文本文件中处理行的困惑
- javascript - 如何在javascript中创建一个计算表单总和的通用函数:sum(a)(b)(c) .... (s)
- java - 如何在我的活动中监听等待计算完成的事件?
- python - Python请求模块在reqeust.get api调用后获得第一个响应
- reactjs - 在 React 和 Material-UI 中处理消息警报状态的惯用方法
- depth-first-search - 为了访问所有节点,起始节点对于广度优先搜索和深度优先搜索是否重要?
- charts - 如何在 AG-GRID 独立图表上以风格方式编辑轴标签?
- java - 如何将 Spring OAuth2 Client 身份验证过滤器与自定义 Web 安全配置一起使用
- r - 创建一个新的日期变量,它与 r 中的原始日期变量在一周中的同一天、同一月和同一年
- c# - MVC / HTML.DropDownListFor / 制作默认选项及其值