ObjectNat
Object-oriented Network Analysis Tools
ObjectNat is an open-source Python library for spatial analysis of urban objects (buildings, services, street observers, noise sources), developed by the IDU team at ITMO University. It computes accessibility, coverage and service provision on street graphs from IduEdu, visibility in 2D and over building heights, noise levels and insolation. Inputs and outputs are GeoPandas GeoDataFrames; the computationally intensive parts run in a compiled Rust extension.
Methods
Isochrones (docs, example). get_graph_isochrones and get_stepped_graph_isochrones return the area reachable from origins within a travel time (minutes) or network distance (metres) on an iduedu.UrbanGraph, as one polygon per origin or as bands of width step. The polygon is built from residual-distance buffers around the reachable nodes, at most off_network_distance (150 m) off the streets ("radius"), from the buffered reachable streets ("ways") or from merged buffers ("separate").
Coverage zones (docs, example). get_graph_coverage and get_stepped_graph_coverage assign every place to the service it reaches at the lowest network cost within a budget (search on the reversed graph, Voronoi cells of graph nodes), so zones do not overlap. get_radius_coverage is a graph-free variant with a fixed radius.
Service provision (docs, example). get_service_provision allocates building demand to services with limited capacity using a gravity-based probabilistic model over a dense or pandas-sparse cost matrix and a normative threshold. It returns a ProvisionResult with the sparse flow matrix and per-building and per-service metrics (provision_value is the share of demand supplied within the threshold); helpers join the metrics to GeoDataFrames, build link lines, drop links beyond a shorter threshold and clip the result to an area.
Visibility (docs, examples: 2D, 2.5D). get_visibility computes the exact visibility polygon (isovist) of each observer among obstacles treated as walls of infinite height and, with isovist_metrics=True, area, compactness, occlusivity, radial statistics, drift and visible share; get_isovist_grid maps these metrics over an area. get_viewshed uses building heights and terrain: a grid cell is visible when the line of sight from the eye (by default 1.6 m above the ground or a roof) to the cell passes above every wall and the ground. get_visibility_catchment and get_viewshed_catchment count, for every cell, the observers that see it (get_observer_points places observers along streets); rasterize draws the counts as a raster.
Noise (docs, example). simulate_noise_grid computes sound levels on a receiver grid from point, line and polygon sources: direct paths and first-order reflections with geometric spreading, air absorption, wall absorption and vegetation attenuation, and diffraction around building corners into their shadows, summed as energies. simulate_noise is a wave-front model for point sources with multiple reflections, and calculate_simplified_noise_frame a fast estimate from visibility masks and distance decay. Ground effect is not modelled. Background: wiki.
Insolation (docs, example). get_insolation follows the sun (NOAA solar position) through a day or a period and returns, on a ground grid among buildings of known height and optional terrain (GeoDataFrame, GeoTIFF or array), the daily hours of direct sun, including ground with no direct sun, the hours on the worst day and the longest continuous sunlit period, for which insolation norms set a minimum; rasterize draws them as a raster. get_facade_insolation computes the same quantities for facade points on every floor and checks them against a norm.
Rasters. Grid results (insolation and noise receivers, catchment cells, isovist fields from get_isovist_grid) are converted to rasters with rasterize; a Raster can be drawn with matplotlib, written to a GeoTIFF file or shown on a folium web map with explore.
Installation
pip install objectnat
ObjectNat supports Python 3.11–3.14 on Linux, macOS and Windows and installs IduEdu 2.4.2 or newer within the 2.x series. Wheels include the compiled extension objectnat._rust, so pip needs no compiler. Installing from a source checkout (pip install .) builds the extension and requires a Rust toolchain (rustup). GeoTIFF terrain requires the optional rasterio package.
Street graphs from IduEdu
Graph-based methods take an iduedu.UrbanGraph (nodes and edges as GeoDataFrames, edge weights time_min and length_meter) and use IduEdu’s Dijkstra routines; ObjectNat does not build graphs itself. IduEdu can download a Geofabrik extract and cut the territory out of it, so no Overpass request is needed (cutting requires pip install "iduedu[pbf]"):
import iduedu
from iduedu import get_4326_boundary, get_intermodal_graph
with iduedu.use_pbf(osm_id=1114252, region="northwestern-fed-district"):
boundary = get_4326_boundary(osm_id=1114252)
graph = get_intermodal_graph(territory=boundary, clip_by_territory=True)
Without the with block the same calls query the Overpass API.
Configuration
from objectnat import config
config.change_logger_lvl("INFO") # hide debug messages
config.set_enable_tqdm(False) # disable progress bars
Contacts
NCCR, National Center for Cognitive Research
IDU, Institute of Design and Urban Studies
Natalya Chichkova, project manager
Danila Oleynikov (Donny), lead software engineer
Contributions are described in CONTRIBUTING.md.
Citing ObjectNat
Citation metadata is kept in CITATION.cff; on GitHub, Cite this repository in the repository sidebar exports it as APA or BibTeX. Publications describing ObjectNat will be listed here.
Metadata
Release files for ObjectNat 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| objectnat-3.0.0.tar.gz | 118.2 kB | With provenance | Details for objectnat-3.0.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| objectnat-3.0.0-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details for objectnat-3.0.0-cp311-abi3-win_amd64.whl |
| objectnat-3.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ x86-64 | Details for objectnat-3.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
| objectnat-3.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ ARM64 | Details for objectnat-3.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
| objectnat-3.0.0-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details for objectnat-3.0.0-cp311-abi3-macosx_11_0_arm64.whl |
| objectnat-3.0.0-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details for objectnat-3.0.0-cp311-abi3-macosx_10_12_x86_64.whl |
Total release size: 2.8 MB
Release files / objectnat-3.0.0.tar.gz
| Download URL | objectnat-3.0.0.tar.gz |
|---|---|
| Size | 118.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4f48af5c542c3b6c589e24ba838d3508b312b2a95c96cc8165df53ddc181424d
|
|
BLAKE2b-256 checksum How to use checksums |
0462085a67a14bbacdf7a25eb284250287168b72298c4d177a9585842036e90b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / objectnat-3.0.0-cp311-abi3-win_amd64.whl
| Download URL | objectnat-3.0.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 474.7 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7ad561abd9bcf937d07c7e853d2097f445014da4cb0f9f6b26b65bf71d4f56f5
|
|
BLAKE2b-256 checksum How to use checksums |
4eb750bd597b0111fa40bb4ab7941c2dfcdaebdeea74351d874a2e7882e5f9dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / objectnat-3.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | objectnat-3.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 582.5 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1f17e0d9aa6d79d091d22d1cc425de4ef253c31cbd63fb2b72324c3bb185ae84
|
|
BLAKE2b-256 checksum How to use checksums |
b79e228c696ad807d27736e5a88a0d277bf62e77a73abe453a910f979f5bbc66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / objectnat-3.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | objectnat-3.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 558.2 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
480fe4485ead714f2ad9645e83bb0b6a941fb5e9452722fcedf32cd769e70360
|
|
BLAKE2b-256 checksum How to use checksums |
e55298a762b01a0557d1ecce1b57f48d809652ffc00e4644e8fefbde39ff1cbf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / objectnat-3.0.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | objectnat-3.0.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 524.6 kB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
33693c198e043037290325ff7be135167858b9a3b9c97a445682580aa3f5031d
|
|
BLAKE2b-256 checksum How to use checksums |
f37150b2ef78f58242347ab1989a8ef024d53a231b6594e4b572a7715c634d89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / objectnat-3.0.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | objectnat-3.0.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 552.7 kB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
41a927c24483b1c6e12163c2f1c631991f81742da49c4cec16da1d65d87ad46c
|
|
BLAKE2b-256 checksum How to use checksums |
f73f42de832207712c9c2740911d090fef6e1b1c34b6d3695ba2d68908fc2b94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logSecurity for ObjectNat 3.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 6 files in this release have been uploaded with provenance metadata.
Attestation for objectnat-3.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.