zero2route3d-sdk
zero2route3d-sdk is a Python library for 3D spatial mobility modeling, biomechanical human kinematics, and multi-criteria routing analytics.
Built for urban planners, mobility researchers, and geospatial developers, it brings physiological human movement equations, terrain-aware 3D graph algorithms, and environmental microclimate impedance surfaces together into a pure-Python, headless package powered by NumPy and SciPy.
🌟 Key Capabilities
-
Biomechanical Kinematics & Energy Modeling:
- Empirical slope-speed curves via Tobler's hiking function ($W(s) = 6.0 \cdot e^{-3.5|s+0.05|}$).
- Exact metabolic energy expenditure via Minetti's 5th-order polynomial equations ($J / (kg \cdot m)$).
- Aerodynamic drag, rolling resistance, and mechanical efficiency for commuter bikes, cargo bikes, and e-scooters.
- Universal Thermal Comfort Index (UTCI) and solar irradiance aspect factors.
-
15 Calibrated Mobility Profiles:
- Pedestrian (Adult, Senior, Child).
- Universal accessibility (Wheelchair ADA, Stroller).
- Micromobility (Commuter Bike, Cargo Bike, E-Bike, E-Scooter, Runner, Hiker).
- Vehicles & Emergency (Emergency EMS, Fire Truck, Logistics Van, Electric Car).
-
Multi-Objective 4D Pareto Optimization (NAMOA):*
- Finds non-dominated Pareto frontiers balancing Travel Time, Cumulative Climb, Thermal Heat Dose, and Metabolic Calories.
-
3D Topological Routing & Isochrones:
- 3D graph construction with elevation draping, turn penalties, and barrier avoidance.
- Anisotropic 3D isochrone wavefront propagation.
-
3D Hidden Markov Model (HMM) Map Matching:
- Robust Viterbi decoding matching noisy GPS/GPX tracks to 3D networks.
-
Micro-Elevation & Solar Ray-Tracing:
- Keys' 16-point bicubic convolution spline interpolation with analytical $\mathcal{C}^1$ slope/aspect derivatives.
- Solar position calculation (azimuth/elevation) and building shadow casting.
-
Spatial Justice & Evacuation:
- Enhanced 2-Step Floating Catchment Area (E2SFCA) healthcare/amenity accessibility.
- Gini coefficients, Lorenz curves, and Palma spatial equity ratios.
- Dynamic hazard zone evacuation routing and safe haven allocation.
-
Headless & Multi-Format I/O:
- Runs everywhere: Jupyter Notebooks, FastAPI/Flask backends, Docker containers, CLI scripts.
- Exports to GeoJSON 3D, GPX 1.1, AutoCAD DXF (AC1009/AC1015) 3D Polylines, and standalone Three.js 60 FPS WebGL 3D Cockpit HTML bundles.
📦 Installation
Install the core library from PyPI:
pip install zero2route3d-sdk
Or install with optional geospatial acceleration libraries:
pip install "zero2route3d-sdk[geo]"
🚀 Quickstart
1. High-Level One-Line Routing & Isochrones
import zero2route3d as zr3d
# Solve 3D Least-Cost Route in 1 line
route = zr3d.solve_3d_route(
origin=(27.11, 38.41),
destination=(27.14, 38.44),
network="izmir_network.geojson", # Or GeoDataFrame / list of RoadSegments
profile="wheelchair" # 15 calibrated profiles
)
print(f"Distance: {route.statistics.total_distance_km:.2f} km")
print(f"Duration: {route.statistics.total_duration_min:.1f} min")
print(f"Climb: +{route.statistics.elevation_gain_m:.1f} m")
# Save or display interactive 3D WebGL Cockpit
route.to_html("route_viewer.html")
# Plot publication-grade elevation & metabolic energy profile with Matplotlib
route.plot(show_energy=True, save_path="profile.png")
# Convert to 3D LineStringZ GeoDataFrame for GIS workflows
gdf = route.to_geodataframe()
2. Multi-Objective 4D Pareto Frontier (NAMOA*)
import zero2route3d as zr3d
pareto_result = zr3d.solve_4d_pareto_frontier(
origin=(27.11, 38.41),
destination=(27.14, 38.44),
network="izmir_network.geojson",
profile="commuter_bike"
)
for idx, sol in enumerate(pareto_result.solutions, start=1):
print(f"Solution #{idx}: Time={sol.costs.time_sec/60:.1f}m, Climb={sol.costs.climb_m:.1f}m, Calories={sol.costs.calories_kcal:.0f}kcal")
# Plot 2D Pareto trade-off curve
zr3d.plot_pareto_frontier_2d(pareto_result, save_path="pareto_curve.png")
3. GeoPandas & NetworkX Ecosystem Bridges
from zero2route3d import to_geodataframe, to_networkx_digraph, from_geodataframe
import geopandas as gpd
# Load standard GeoDataFrame of road centerlines
gdf = gpd.read_file("streets.geojson")
# Convert GeoDataFrame into 3D RoadSegment graph
segments = from_geodataframe(gdf)
# Convert 3D routing graph into NetworkX DiGraph with slope & kinematic weights
nx_digraph = to_networkx_digraph(segments)
4. Command Line Interface (CLI)
# Inspect all 15 mobility profiles
zero2route3d profiles
# Run headless 3D route calculation from terminal
zero2route3d route --origin 27.11,38.41 --dest 27.14,38.44 --network streets.geojson --profile wheelchair --out-geojson route.geojson --out-dxf route.dxf --out-html viewer.html
# Compute 3D travel time isochrone bands
zero2route3d isochrone --center 27.12,38.42 --intervals 5,10,15 --network streets.geojson --out-geojson isochrones.geojson
📚 Mobility Profiles Catalog
| Key | Profile Name | Base Speed | Max Slope | Stairs Policy | Target Use-Case |
|---|---|---|---|---|---|
adult |
Standard Adult | 5.0 km/h | 25.0% | Allowed (1.2×) | Everyday urban walking |
senior |
Senior / Elderly | 3.2 km/h | 10.0% | Heavy Penalty (8.0×) | Age-friendly routing |
child |
Child / Elementary | 3.8 km/h | 12.0% | Heavy Penalty (5.0×) | Safe routes to school |
wheelchair |
Wheelchair ADA | 3.5 km/h | 5.0% | Forbidden (1000×) | Barrier-free ADA routing |
stroller |
Stroller / Pram | 4.0 km/h | 8.0% | Forbidden (500×) | Family-friendly walking |
cargo_bike |
Cargo Bike | 14.0 km/h | 8.0% | Forbidden (1000×) | Urban freight & logistics |
commuter_bike |
Commuter Bike | 18.0 km/h | 15.0% | Heavy Penalty (20.0×) | Daily bicycle commuting |
ebike |
Electric Assist Bike | 22.0 km/h | 22.0% | Heavy Penalty (20.0×) | Topography-immune cycling |
escooter |
E-Scooter | 16.0 km/h | 10.0% | Forbidden (1000×) | First/last-mile micromobility |
runner |
Jogger / Runner | 10.0 km/h | 30.0% | Allowed (1.0×) | Fitness & athletic routing |
hiker |
Mountain Hiker | 4.5 km/h | 50.0% | Allowed (1.0×) | Trail & topographic hiking |
emergency_ems |
Ambulance EMS | 50.0 km/h | 20.0% | Forbidden (1000×) | Rapid emergency response |
emergency_fire |
Fire Engine Heavy | 40.0 km/h | 16.0% | Forbidden (1000×) | Heavy emergency vehicles |
logistics_van |
Delivery Van | 45.0 km/h | 18.0% | Forbidden (1000×) | Courier & parcel delivery |
electric_car |
Electric EV | 50.0 km/h | 25.0% | Forbidden (1000×) | Regenerative braking routing |
🧪 Development & Testing
Clone the repository and install in editable mode:
git clone https://github.com/YusufEminoglu/zero2route3d_sdk.git
cd zero2route3d_sdk
pip install -e ".[dev]"
Run test suite with coverage:
pytest tests/ -v --cov=zero2route3d
Run linter and type checker:
ruff check .
ruff format --check src tests
mypy src
📄 License & Citation
Distributed under the MIT License. See LICENSE for details.
If you use this library in scientific research, please cite:
@software{eminoglu2026zero2route3d,
author = {Eminoğlu, Yusuf},
title = {zero2route3d-sdk: Headless 3D spatial mobility, biomechanical human kinematics, and multi-criteria routing engine},
year = {2026},
url = {https://github.com/YusufEminoglu/zero2route3d_sdk}
}
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zero2route3d_sdk-0.2.0.tar.gz.
File metadata
- Download URL: zero2route3d_sdk-0.2.0.tar.gz
- Upload date:
- Size: 122.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a29458c5ec51bc0bac388093b86b53d6a610d504966754c6b76093bb51a3bdaa
|
|
| MD5 |
caa9463119ac37561e2bced8236361b7
|
|
| BLAKE2b-256 |
d42933aa3ef1defe07053a06131d8b5273bbab2c390c947b2c1e58115bde88b7
|
Provenance
The following attestation bundles were made for zero2route3d_sdk-0.2.0.tar.gz:
Publisher:
publish.yml on YusufEminoglu/zero2route3d_sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zero2route3d_sdk-0.2.0.tar.gz -
Subject digest:
a29458c5ec51bc0bac388093b86b53d6a610d504966754c6b76093bb51a3bdaa - Sigstore transparency entry: 2588682604
- Sigstore integration time:
-
Permalink:
YusufEminoglu/zero2route3d_sdk@2b3799a38bfcc3bf763c0c909a8498ea7960b893 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/YusufEminoglu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b3799a38bfcc3bf763c0c909a8498ea7960b893 -
Trigger Event:
release
-
Statement type:
File details
Details for the file zero2route3d_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: zero2route3d_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 123.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb0cb0218cbe91b69e6e9f6a33d3fb031e49d9c81f9009bfc840962a95ff21d9
|
|
| MD5 |
5cb205abfea964ad454edc9e8f4dbfef
|
|
| BLAKE2b-256 |
cb529807ca8b93a7b4add33c947e7c1555ce2daf95cd2740e7ea5942a259fba4
|
Provenance
The following attestation bundles were made for zero2route3d_sdk-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on YusufEminoglu/zero2route3d_sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zero2route3d_sdk-0.2.0-py3-none-any.whl -
Subject digest:
cb0cb0218cbe91b69e6e9f6a33d3fb031e49d9c81f9009bfc840962a95ff21d9 - Sigstore transparency entry: 2588683319
- Sigstore integration time:
-
Permalink:
YusufEminoglu/zero2route3d_sdk@2b3799a38bfcc3bf763c0c909a8498ea7960b893 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/YusufEminoglu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2b3799a38bfcc3bf763c0c909a8498ea7960b893 -
Trigger Event:
release
-
Statement type: