mtl_isochrone / scripts /build_network.py
HenriLD's picture
Montreal multi-modal transit isochrone map
e855a27
Raw
History Blame Contribute Delete
1.17 kB
"""Compile the downloaded GTFS feed(s) into a serialized RAPTOR network.
Usage: python scripts/build_network.py
Output: data/processed/network.pkl (consumed by the API server / engine)
"""
from __future__ import annotations
import pickle
import sys
import time
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from config import DATA_PROCESSED, NETWORK_FILE, SERVICE_DATE # noqa: E402
from engine.gtfs import build_network # noqa: E402
from scripts.apply_metro_geometry import apply_metro_geometry # noqa: E402
def main() -> None:
t0 = time.time()
net = build_network(target_date=SERVICE_DATE)
# swap the coarse GTFS metro shapes for accurate OSM geometry (no-op if the
# geometry file is missing — fetch it with scripts/fetch_metro_geometry.py)
apply_metro_geometry(net)
DATA_PROCESSED.mkdir(parents=True, exist_ok=True)
with open(NETWORK_FILE, "wb") as f:
pickle.dump(net, f, protocol=pickle.HIGHEST_PROTOCOL)
size_mb = NETWORK_FILE.stat().st_size / 1e6
print(f"Wrote {NETWORK_FILE} ({size_mb:.1f} MB) in {time.time()-t0:.1f}s")
if __name__ == "__main__":
main()