ObjectNat

Object-oriented Network Analysis Tools

ObjectNat — an open-source Python library for object-oriented network analysis and spatial accessibility modeling, developed by the IDU team at ITMO University.

Code style: black PyPI version Tests and coverage Coverage License GitHub


Overview

ObjectNat extends urban network analysis with a focus on object-level geospatial computation. It provides a unified set of tools for analyzing coverage, provision, accessibility, visibility, and noise simulation on city-scale geospatial data.

The library integrates seamlessly with:

  • GeoPandas and Shapely for spatial operations;

  • IduEdu UrbanGraph for graph preparation and multimodal routing;

  • Python’s scientific ecosystem (NumPy, Pandas, Matplotlib, etc).


Features


Installation

pip install objectnat

Requires Python 3.11+ and the standard geospatial stack (Pandas, GeoPandas, Shapely, NumPy). Graph-based accessibility methods consume UrbanGraph objects from IduEdu.


Quickstart

To ensure optimal performance of ObjectNat’s geospatial analysis functions, it’s recommended to utilize urban graphs sourced from the IduEdu library. IduEdu is an open-source Python library designed for the creation and manipulation of complex city networks derived from OpenStreetMap data.

# Install required packages (uncomment if needed)
# !pip install iduedu objectnat

import geopandas as gpd
from shapely.geometry import Point

from iduedu import get_4326_boundary, get_intermodal_graph
from objectnat import get_stepped_graph_isochrones

# Load boundary and build graph for a region (OSM ID 1114252)
poly = get_4326_boundary(osm_id=1114252)
graph = get_intermodal_graph(territory=poly, clip_by_territory=True)

# Compute stepped accessibility isochrones from one or more origin points.
origins = gpd.GeoDataFrame(
    geometry=[Point(30.3141, 59.9386)],
    crs=4326,
)

stepped_isochrones = get_stepped_graph_isochrones(
    graph,
    gdf_origins=origins,
    weight_type="time_min",
    weight_value_cutoff=10,
    geometry_type="separate",
    step=2,
)

stepped_isochrones.explore()

Contributions are very welcome! Open an issue or PR on GitHub to suggest new features or improvements.


Contacts


License

This project is open-source. See the LICENSE.txt file for details.


Publications

Coming soon…