Dataset Pack Studio
Inspect, repair, reproject, package, validate, install, and safely switch arbitrary-region A.T.O.M dataset packs.
Dataset Pack Studio builds portable, local A.T.O.M dataset packs for arbitrary regions. It inspects source coverage before build, repairs vector geometry, reprojects vectors to EPSG:4326, crops to an optional planning extent, writes deterministic GeoJSON, hashes every emitted layer, and produces a schema-v2 manifest with provenance and QA evidence.
It does not download data from a browser or upload source data to a service. Input processing and runtime switching remain local.
Environment
Install the hash-locked pipeline environment:
python3 -m venv data-pipeline/.venv
data-pipeline/.venv/bin/pip install --require-hashes -r data-pipeline/Requirements.txtThe Studio directly uses GeoPandas, Shapely, and PyProj. Supported vector inputs are formats readable by GeoPandas, including GeoJSON and GeoPackage. Terrain is copied as a binary layer and must have truthful CRS and unit metadata.
Inspect Sources Before Building
data-pipeline/.venv/bin/python data-pipeline/pack_studio.py inspect \
--towers /data/izmir/cells.gpkg \
--buildings /data/izmir/buildings.gpkg \
--bounds 26.80,38.30,27.35,38.65 \
--jsonThe preview reports source and output CRS,
input/invalid/repaired/dropped/output geometry counts, per-field missing
counts, output bounds, and requested-area coverage. Use
--towers-crs or another --<layer>-crs
override only when a source has no embedded CRS and the supplied value
is authoritative.
Build A Schema-v2 Pack
data-pipeline/.venv/bin/python data-pipeline/pack_studio.py build \
--id izmir-planning-2026 \
--name "Izmir Planning Dataset" \
--version 2026.07 \
--output /datasets/izmir-planning-2026 \
--source "Municipal building inventory, 2026-06" \
--source "Operator-authorized planning export, 2026-07" \
--license "Municipal Open Data License" \
--license "Internal planning use only" \
--confidence "Planning-grade cells; heights are partially surveyed." \
--bounds 26.80,38.30,27.35,38.65 \
--towers /data/izmir/cells.gpkg \
--buildings /data/izmir/buildings.gpkg \
--terrain /data/izmir/elevation.tif \
--terrain-crs EPSG:32635 \
--terrain-units m \
--clutter /data/izmir/clutter.gpkg \
--building-heights /data/izmir/heights.gpkg \
--materials /data/izmir/materials.gpkgThe output directory must be absent or empty. The Studio stages the
pack beside the destination and publishes it only after all layers and
the manifest are complete. Required tower/building layers are normalized
to towers.geojson and buildings.geojson;
optional layers use stable filenames. Every referenced file receives a
SHA-256 entry.
Manifest Schema v2
Schema v2 retains the required identity, EPSG:4326 bounds, sources, licenses, confidence note, files, and hashes from v1, and adds:
- Per-layer kind, format, CRS, optionality, source, license, confidence, and optional units.
- Geometry repair and output counts for each vector layer.
- Missing-field counts and requested/data coverage bounds.
- Optional
terrain,clutter,building_heights, andmaterialsfiles.
The engine loads and validates optional-layer metadata. A supported north-up EPSG:4326 COG/GeoTIFF terrain layer is sampled by the 2.5D point-to-point path profiler. Fast sectors, interference, optimization, batch runs, and analytical surfaces remain terrain-independent. Clutter and separate height/material sidecar layers are not automatically joined; user-selected path-profile sensitivity inputs must not be interpreted as surveyed layer values.
Validate And Install
Validate the finished pack with the same loader used by the server:
cd backend-go
go run ./cmd/validate-dataset /datasets/izmir-planning-2026Set ATOM_DATASET_DIR to the initial pack. To enable the
Data tool's installed-pack list and safe switching, set
ATOM_DATASETS_ROOT to a directory that contains packs as
immediate child directories:
/datasets/
├── ankara-open-planning/manifest.json
└── izmir-planning-2026/manifest.json
The runtime never accepts a filesystem path from the switch API.
POST /api/datasets/switch accepts an installed manifest ID,
resolves only entries beneath ATOM_DATASETS_ROOT, rejects
duplicate IDs and symlink escapes, validates the candidate's geometry
and hashes, then swaps the immutable in-memory pack. A failed load
leaves the previous pack active. Configure
DATASET_ADMIN_API_KEY at an origin gateway when dataset
activation must be restricted.
Required Review
Before using a pack for a planning decision, review source authority, redistribution terms, missing RF fields, geometry repairs/drops, requested coverage ratio, coordinate reference systems, optional raster units, and whether confidence statements match the actual collection method. A successful hash or geometry validation proves integrity and structural usability, not operator accuracy.