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

标签: pythondataframeopenstreetmap

解决方案


推荐阅读