Skip to content

Chatt diorama: real-life accuracy research — registration findings, source-data gaps, upgrade paths #229

Description

@TortoiseWolfe

Goal: make the /chatt Chattanooga Mini diorama as accurate to real life as possible. This issue is the durable record of the registration research from the 2026-07-07/08 sessions (what was measured, what flip-flopped and why, what's genuinely unresolved) plus the source-data accuracy gaps and their upgrade paths. It exists so future work starts from evidence, not from re-derivation. Companion issues: #225 (visible symptom: buildings render over the Tennessee River), #226 (ground-game mode — benefits directly from a more accurate model).

1 · What rigorously registers (measured, not eyeballed)

The three data layers are NAIP aerial drape (ArcGIS exportImage), USGS terrain (OpenTopoData ned10m), and OSM vectors (Overpass: buildings/highways/water). Cross-registration measurements:

OSM ↔ drape — registers to ~5 m where tested. The Walnut Street Bridge (OSM way 164158074, an unambiguous linear feature in both sources) projected through the pipeline's ENU→UV mapping lands ON the aerial bridge: mean E-W offset −2.8 px (~5 m), median 0 px, 83% of samples within 10 px:

bridge registration
(magenta = OSM bridge line; yellow = OSM aquarium footprint — note it traces the real bridge)

OSM streets trace the aerial roads corridor-wide (north half / south half):

Box-corner projection is exact: the four bbox corners (swLat 35.0078, swLon −85.316, neLat 35.06, neLon −85.3) map to drape pixel corners (0,0)/(728,0)/(0,2377)/(728,2377) precisely.

ArcGIS honors the requested bbox (verified via f=json): returned extent ymin=35.0078, ymax=35.06 exactly — the #223 degree-aspect fix works; the ±616 m N-S over-scan that caused the original float is gone.

Buildings ↔ OSM is exact by construction (buildings.json ring centroids equal OSM→ENU centroids, delta 0.0 m — same projection code path).

2 · What was historically wrong, and what is still unverified

  • Historically real: pre-fix(chatt): register the aerial drape N-S so buildings stop floating over the river #223, ArcGIS silently expanded the drape's latitude extent by ~616 m per end (metre-aspect pixels vs degree bbox), shifting every N-S feature — the original buildings-in-river cause. Fixed in 0ef7fb9.
  • Still unverified: the terrain (elevation) layer has never been rigorously cross-registered against drape/OSM the way the bridge test did for OSM↔drape. Its low-elevation band visually traces the river in 2D overlays, but a quantitative registration bound (like the bridge's ~5 m) does not exist for terrain↔anything. This is the remaining registration unknown.
  • Temporal desync is unexamined: NAIP is flown every 2–3 years; OSM is edited continuously. Buildings can exist in one source and not the other, and no capture-date check exists anywhere in the bake.

3 · Failed-hypothesis log (the methodology record)

Every one of these was confidently asserted during the sessions and then overturned. Recorded so nobody re-walks the loop:

# Hypothesis Why it seemed true How it died
1 "Drape is 1016 m too short N-S" pixel-count × mpp ≠ groundHm Runtime stretches the image by UV across groundHm; pixel count is irrelevant
2 "Layers are aligned; floaters are just dark-water lighting" tidy Miniature overhead + 2D footprint overlay 2D/overhead proofs flatten the 3D problem — the user rejected it, correctly
3 "Terrain water bleeds ~300 m south of the aerial waterline" single-column brightness scan + one bad landmark lat/lon The full-mask overlay showed terrain water tracing the river well; the "landmark" was a mis-eyeballed building
4 "OSM markers land 150–240 m south of the real buildings" eyeballed zoomed crops (aquarium/courthouse/Republic Centre) The bridge-line measurement (~5 m) proved OSM↔drape registration; the eyeballed buildings were misidentified
5 "Floaters are the clipped North Shore seen edge-on" terrain profile shows a ~60 m land sliver at the box's north edge True observation, but still a single-symptom explanation — doesn't address whole-model accuracy
6 "Streets drift off roads in the south half" downscaled overview image Zoomed inspection + measurement: streets sit on roads in the south too

Standing methodology rules (earned the hard way): a 2D overlay never proves 3D registration; brightness/green water classifiers conflate tree-shadow with water in this NAIP tile (a low-local-variance term fixes that); eyeballed landmark identification is not measurement; a nearest-feature metric in a dense city always finds something within the window (biased toward 0); verify against service-returned ground truth (ArcGIS f=json extents) and unambiguous shared features (bridges), not the code's own assumptions.

4 · Accuracy gaps vs real life (independent of registration)

Gap Current state Real-life error Better source / fix
Geodesy constants enu.ts M_PER_DEG_LAT = 110574 — the equator value 0.33% N-S scale compression ≈ 19 m over the 5.77 km corridor (true at 35°N ≈ 110 941); M_PER_DEG_LON ~0.11% off similarly Latitude-correct series constants, or proper UTM 16N projection
Building heights 86% fallback (1298/1510 buildings have no OSM height/levels; ruleHistogram) Most of downtown is a guessed-height box Microsoft Global ML Building Footprints (height attribute), city LIDAR-derived heights, or per-zone stochastic heights tuned to Chattanooga stock
Terrain resolution OpenTopoData ned10m sampled at ~30 m (49×195) Riverbank position quantized to ~30 m; bank slope smeared USGS 3DEP 1 m lidar DEM (covers Hamilton County) via the same National Map services
Aerial resolution NAIP fetched at 2 m/px 3× resolution discarded (NAIP native ~0.6 m) Fetch at native res; mind texture-size limits (tile the drape if needed)
Water No water geometry in OSM extract for the main channel (verified: is_in on mid-river returns nothing) River = dark pixels on a flat mesh Aerial-waterline carve (WIP on fix/chatt-camera-buried-tour) or NHD (National Hydrography Dataset) polygons
Temporal consistency No capture dates recorded OSM-vs-NAIP building mismatches possible Record NAIP acquisition date + OSM timestamp in the manifest; flag disagreements

5 · External references feeding this work

  • Modelur article (colleague's pointer): https://modelur.com/openstreetmap-sketchup-plugins/ — production OSM→3D tools (Skp2osm, Cadmapper, PlaceMaker, ModelurOSM). All emphasize georeferenced terrain placement. Cadmapper offers free geolocated 3D city extracts ≤1 km² (buildings + topography + roads) — the cheapest independent reference dataset to validate our building/terrain placement against ("stolen answer key" style: check our pipeline where a trusted answer exists).
  • Bilawal Sidhu, "The Internet's Hidden 3D Model" (May 2026, https://youtu.be/KWXuxfdZhwk) — 17-year arc of photo-based 3D reconstruction (SfM → MegaDepth → NeRF → 3DGS → VGGT/π³ → MegaDepth-X). Cleaned, timestamp-anchored transcript lives at ~/repos/TranScripts/Spatial/Spatial_Edited/ (locally symlinked as knowledge/spatial, gitignored). Transferable ideas: ground-truth-first validation (MegaDepth-X's "stolen answer key" = train/verify against known-good reconstructions); multi-source fusion (SRI's diffusion-guided splatting fuses ground + drone + satellite — ours is NAIP + 3DEP + OSM); the long-tail problem is exactly our 86%-fallback heights (well-mapped landmarks have data; everywhere else doesn't); and a future path where a 3D Gaussian Splat capture of downtown Chattanooga replaces extruded boxes entirely for photoreal fidelity.

6 · Upgrade path (to be extended by the accuracy code review)

Ranked by realism-impact per effort — an accuracy-focused review of scripts/bake/* + src/world/* follows as a comment on this issue:

  1. Fix the geodesy constants (one-line, removes a systematic 0.33% scale error).
  2. 1 m 3DEP terrain (same fetch pattern, different dataset — sharpens the riverbank that caused Chatt diorama: buildings render ON the river — layers are NOT aligned (verification methodology also broken) #225's symptom).
  3. Building heights from a source with real coverage (kills the 86% fallback).
  4. Native-resolution NAIP drape.
  5. Cadmapper 1 km² cross-validation of downtown placement.
  6. Record source dates; detect temporal mismatches.
  7. (Research horizon) 3DGS capture for photoreal replacement of the extruded-box aesthetic.

WIP note: the symptom-fix work (aerial-waterline carve scripts/bake/carve-water.ts, lit Water.tsx, 49×195 terrain, OSM water in the Overpass query) sits uncommitted on fix/chatt-camera-buried-tour. Items 1–2 above may supersede parts of it; reconcile before merging.

🤖 Generated with Claude Code


7 · The business model (2026-07-08 — this is now the program's north star)

Freemium: a client enters any address in any city → the pipeline generates a super-accurate digital twin of that address's surroundings (this bake, made repeatable — see the parameterization ticket). Premium: if they like it, upsell to onsite LiDAR scanning for as-is/as-built construction documentation, surfaced as a dedicated high-resolution property page linked from a button on their parcel in the twin.

Downtown Chattanooga is the flagship demo — every fidelity improvement in this issue's upgrade path (§6) exists to make the flagship sell the concept: geodesy correctness, 1 m 3DEP lidar terrain, real building heights, native-res imagery, NHD water, temporal metadata, Cadmapper/modelur-tool cross-validation, and the Bilawal-derived practices (ground-truth-first validation, multi-source fusion, 3DGS photoreal horizon — transcript at knowledge/spatial).

Repeatability is a hard requirement, not a nice-to-have: everything Chattanooga-specific in the bake (box.ts corridor, HERO_WAY_IDS, HEIGHT_OVERRIDES, tour waypoints) is tech debt against the address-in → twin-out flow. Program tickets:

  • Parameterize the bake: address → box → twin (geocode → derive box → bake → verify; per-site config) — the freemium engine.
  • Repeatable footprint-verification report — every bake, every city: whole-box footprint-on-aerial overlays + registration statistics with hard thresholds ("check the footprints of all the buildings", systematically).
  • LiDAR premium demo (mini-twin first) — the real client parcel at 2630 E Main St (Polycam scan in ada-stair-generator/data/polycam/, ~13.8k-vert mesh, meters/Y-up, +USGS 1 m terrain + parcel GIS) gets its OWN mini-twin via the parameterized pipeline (~3 km east of the flagship box), DAE→GLB conversion, and a "client house" button in the flagship → dedicated as-built page. Privacy-gated — real client address/as-built never ships publicly without consent.

Backlog: flagship box extension — after the mini-twin proves the flow, extend the box north (resolves #225's clipped North Shore) and east (physically includes the client parcel) in one re-bake (~3× E-W cost; re-verify with the footprint report).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions