Матрица времени в пути от зданий до сервисов¶
Этот ноутбук рассчитывает матрицу времени в пути от зданий из примера до сервисов из примера по интермодальному графу (пешком + общественный транспорт) функцией od_matrix из IduEdu и сохраняет её в examples_data/matrix_time.parquet для примера обеспеченности.
Последний раздел, Своя территория, объясняет, как рассчитать матрицу для другой территории.
# !pip install "iduedu[pbf]" pyarrow
import geopandas as gpd
import iduedu
import pandas as pd
from iduedu import get_intermodal_graph, od_matrix
from shapely.ops import unary_union
1. Здания и сервисы¶
# Read building and service datasets
buildings = gpd.read_parquet('examples_data/buildings.parquet')
services = gpd.read_parquet('examples_data/services.parquet')
2. Территория¶
Выпуклая оболочка всех зданий и сервисов с буфером 0,001° (около 60–110 м) задаёт границы графа.
polygon = unary_union(
buildings.to_crs(4326).geometry.to_list() + services.to_crs(4326).geometry.to_list()
).convex_hull.buffer(0.001)
3. Интермодальный граф¶
Территория вырезается из выгрузки Geofabrik по Северо-Западному федеральному округу (iduedu.use_pbf); тот же вызов без блока with скачивает данные из Overpass API.
with iduedu.use_pbf(territory=polygon, region="northwestern-fed-district"):
G_intermodal = get_intermodal_graph(territory=polygon, clip_by_territory=True)
2026-11-04 22:07:48.449 | WARNING | Removing 407 nodes outside the largest strongly connected component. Retaining 21326 of 21733 nodes.
2026-11-04 22:07:48.470 | WARNING | Public transport nodes dropped with the smaller components: {'trolleybus': 2}
4. Матрица времени в пути¶
od_matrix привязывает точки отправления и назначения к узлам графа и выполняет поиски Дейкстры с весом рёбер weight ("time_min", минуты) до threshold (45 минут). Пары за пределами порога недостижимы.
# Compute travel time matrix (in minutes)
matrix: pd.DataFrame = od_matrix(
G_intermodal,
gdf_origins=buildings,
gdf_destinations=services,
weight="time_min",
threshold=45,
)
5. Сохранение¶
Матрица сохраняется для примера обеспеченности.
# Save matrix to Parquet format
# IduEdu returns a sparse DataFrame to keep large OD matrices compact in memory.
# Parquet writers do not support pandas SparseDtype columns, so convert to a dense
# DataFrame before saving. Unreachable pairs stay encoded as np.inf.
matrix_dense = matrix.sparse.to_dense()
matrix_dense.to_parquet('examples_data/matrix_time.parquet')
6. Своя территория¶
Этот ноутбук и есть рецепт для другой территории: запишите свои здания и сервисы (GeoDataFrame в любой системе координат) в buildings и services в разделе 1 и выполните его. Территория вокруг них, граф и матрица рассчитаются по ним; если region не задан, iduedu.use_pbf сам выбирает выгрузку Geofabrik. Сохраните матрицу под своим именем и передайте её в get_service_provision, как в примере обеспеченности.