AOI public-geodata acquisition + SceneBundle fusion and meshing core for 3D area reconstruction
Project description
geoscena
AOI public-geodata acquisition + SceneBundle fusion and meshing core for 3D area
reconstruction. geoscena turns a geographic Area of Interest into a projected, fused,
mesh-ready SceneBundle (Draco/meshopt-ready glTF layers + a provenance manifest) assembled
from open public datasets. It is the reusable, product-agnostic core behind
Maqueta; nothing enters a bundle
without recorded provenance (source, URL, license, fetch date).
What it does
Given an AOI (a centre + half-size, or a bbox), geoscena:
- Fetches each available open layer, AOI-scoped, from its authoritative source:
- Buildings + roads from Overture Maps GeoParquet on S3 (DuckDB spatial pre-filter).
- Terrain from Copernicus GLO-30 DSM (AWS Open Data, keyless COG windowed reads).
- Land cover from ESA WorldCover 10 m (AWS Open Data).
- Water / green / rail context from OpenStreetMap (OSMnx / Overpass).
- (extendable: Google Open Buildings 2.5D height rasters, GHS-POP, USGS 3DEP lidar.)
- Fuses them: the height-provenance ladder assigns every building a height from the best available source (measured -> floors x floor-height -> height raster -> prior) and records which source was used per building, so inference is reported, never hidden.
- Meshes in the AOI local metric frame (metres, Y-up on export): adaptive terrain TIN (Delatin-style greedy refinement), extruded building prisms, buffered road/rail ribbons draped on the terrain, flat water/green surfaces.
- Writes a
SceneBundle: one.glbper layer +manifest.json(the processing->web contract), with per-layer stats, height-provenance mix, and a data-credits list.
Install
pip install geoscena # core (numpy/scipy/shapely/geopandas/rasterio/trimesh)
pip install 'geoscena[overture]' # + DuckDB (buildings/roads)
pip install 'geoscena[osm]' # + OSMnx (water/green/rail)
pip install 'geoscena[all]' # everything (incl. lidar, gltf compression helpers)
Python >= 3.11. No native compiler required (the terrain TIN is pure-Python over SciPy).
Use
from geoscena.aoi import AOI
from geoscena.build import BuildConfig, build_scene
aoi = AOI.from_center("Berlin Mitte", lon=13.405, lat=52.517, half_size_m=1200)
bundle = build_scene(aoi, BuildConfig(fetched="2026-07-12"))
bundle.write("out/berlin_mitte") # -> terrain.glb, buildings.glb, roads.glb, manifest.json
or from the CLI:
geoscena build --name "Berlin Mitte" --lon 13.405 --lat 52.517 --half 1200 \
--fetched 2026-07-12 --out out/berlin_mitte
geoscena info # list known sources + licenses
Provenance and licensing
Every layer carries a LayerProvenance (source, URL, license key, fetch date, method).
bundle.any_noncommercial() flags AOIs that pulled a non-commercial source. Default sources
are all commercial-OK: Overture/OSM (ODbL), GLO-30 (Copernicus free), WorldCover (CC-BY-4.0).
See docs/ for the data contracts and per-source cards.
Status
0.x while the SceneBundle contract stabilizes. Consumed by Maqueta via git tag ref until the
first PyPI release (ADR-0061 trusted publishing).
Owner: Felipe Santibanez-Leal · fsantibanez@gmail.com · @fsantibanezleal
Project details
Release history Release notifications | RSS feed
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 geoscena-0.1.0.tar.gz.
File metadata
- Download URL: geoscena-0.1.0.tar.gz
- Upload date:
- Size: 31.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54769ed54823876f685cfd3d09f15b1f4e65f5e7d0c5b41dfa1ef19b6916d2b4
|
|
| MD5 |
a9a05eca3713fd7f2856d1ae3a703891
|
|
| BLAKE2b-256 |
fcc970caa3708f5e9453e2f98f071dcceb06f8853d8daa21fc56d4e4854212e2
|
Provenance
The following attestation bundles were made for geoscena-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on fsantibanezleal/CAOS_GeoScena
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geoscena-0.1.0.tar.gz -
Subject digest:
54769ed54823876f685cfd3d09f15b1f4e65f5e7d0c5b41dfa1ef19b6916d2b4 - Sigstore transparency entry: 2159016137
- Sigstore integration time:
-
Permalink:
fsantibanezleal/CAOS_GeoScena@7512b33a05cdee7df904b1e9b47bc3787356ff74 -
Branch / Tag:
refs/heads/develop - Owner: https://github.com/fsantibanezleal
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7512b33a05cdee7df904b1e9b47bc3787356ff74 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file geoscena-0.1.0-py3-none-any.whl.
File metadata
- Download URL: geoscena-0.1.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed1c41194c61411489773cabc7aded4c9d4b203de37617b83a18ab06cd083f49
|
|
| MD5 |
a3546a021636dbed6eaf294884dbf216
|
|
| BLAKE2b-256 |
17a7a48dda1419141314de041deef6477fe9e0edeb1e528cbf0c9bbc34445524
|
Provenance
The following attestation bundles were made for geoscena-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on fsantibanezleal/CAOS_GeoScena
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geoscena-0.1.0-py3-none-any.whl -
Subject digest:
ed1c41194c61411489773cabc7aded4c9d4b203de37617b83a18ab06cd083f49 - Sigstore transparency entry: 2159016216
- Sigstore integration time:
-
Permalink:
fsantibanezleal/CAOS_GeoScena@7512b33a05cdee7df904b1e9b47bc3787356ff74 -
Branch / Tag:
refs/heads/develop - Owner: https://github.com/fsantibanezleal
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7512b33a05cdee7df904b1e9b47bc3787356ff74 -
Trigger Event:
workflow_dispatch
-
Statement type: