City2Graph: A Python library for Heterogeneous Graph Neural Networks and spatial analysis in urban systems [R]

Reddit r/MachineLearning Tools

Summary

City2Graph is a new Python library that converts geospatial data into heterogeneous graphs for spatial analysis and Graph Neural Networks, with a peer-reviewed paper published in Computers, Environment and Urban Systems. It supports morphological, transport, mobility, and proximity graph construction, integrating with PyTorch Geometric and other graph tools.

City2Graph is a Python library I built that turns geospatial data into analysis-ready graphs (for spatial analysis, network analysis, and Graph Neural Networks as GeoAI), and the paper describing it has just been published, so I wanted to share it here. Repository: https://github.com/c2g-dev/city2graph import city2graph as c2g # buildings + street segments -> heterogeneous morphological graph nodes, edges = c2g.morphological_graph(buildings, segments) # straight into PyTorch Geometric data = c2g.gdf_to_pyg(nodes, edges) What it covers: Morphology: graphs of buildings, streets, and tessellated urban fabric from OpenStreetMap and Overture Maps Transportation: GTFS and GBFS feeds loaded through DuckDB, with GTFS aggregated into stop-to-stop transit graphs Mobility: OD matrices and flow data (migration, bike-sharing, pedestrian counts) as weighted spatial graphs Proximity and contiguity: KNN, Delaunay, Gilbert, Waxman, plus queen/rook contiguity, under Euclidean, Manhattan, or network distances Heterogeneous graphs and metapaths: several node and edge types in one graph, with metapath-derived edges composing relations across them Conversion: round trips between GeoDataFrames, NetworkX, rustworkx, and PyTorch Geometric Data/HeteroData, with geometries and attributes kept intact It sets out why urban data is better treated as heterogeneous graphs than as flat feature tables, how the morphological, transport, mobility, and proximity constructions relate to each other, and how the library keeps geometry and graph structure consistent across conversions. If you use the library in research, that is the citation. Paper Sato, Y., Pietrostefani, E., Mahabir, R., & Arribas-Bel, D. (2026). City2Graph: A Python library for Heterogeneous Graph Neural Networks and spatial analysis in urban systems. Computers, Environment and Urban Systems, 130, 102492. Happy to answer questions about the design, and issues or PRs are very welcome. I am especially keen to hear which data sources people want supported next.
Original Article

Similar Articles

A Graph-Based Control Interface for Traffic Signals on Heterogeneous Road Networks

arXiv cs.LG

This paper presents a graph-based traffic signal control interface using a shared graph neural network to assign scores to movements, with deterministic phase construction via incidence matrices. Experiments evaluate transfer across synthetic and city road networks, showing feasibility but sensitivity to distribution shifts.

Spatiotemporal Graph Transformer for Traffic Intelligence in Edge Computing

arXiv cs.LG

This paper proposes a spatiotemporal graph Transformer framework for traffic forecasting in edge computing, combining graph neural networks for spatial correlations and Transformer self-attention for long-range temporal dependencies. Experiments on real-world cellular data show it outperforms recurrent graph-based baselines like GCN-LSTM and GCN-GRU.