You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The panorama sphere uses Euler order `ZXY` — matrix `Rz·Rx·Ry` — meaning Y (heading) is applied first to pixels, then X (pitch), then Z (roll) in the corrected frame. Both `viewer.js` (calibration) and `street_view_viewer.js` (ebgeo_web) must use the same order.
256
256
257
-
### Elevation Delta in Projection
258
-
When both camera and target have `ele` data, the elevation difference `ΔE = target.ele - camera.ele` offsets the target marker vertically: `y = -cameraHeight + ΔE`. This affects marker Y position, flatten ratio, and slant distance for marker sizing. Clamped to ±2m (`MAX_ELEVATION_DELTA`) to protect against GPS noise. When either `ele` is null, `ΔE = 0` (flat ground fallback).
257
+
### Height Model (Flat Ground)
258
+
All markers are projected using a **flat ground model** — GPS elevation (`ele`) is stored but **not used**for projection. The `ele` column is retained in the database and API responses for informational purposes only.
259
259
260
-
### Slope Roll Estimation
261
-
`scripts/estimate-slope-roll.js` estimates `mesh_rotation_z` (roll) from elevation data between a photo and its `next` target: `θ = atan2(ΔE, distance)`. Slopes beyond `--max-angle` (default 15°, recommended 10°) are **discarded** as GPS noise (set to 0), not clamped. Supports `--dry-run`, `--clear`, `--project <slug>`, `--max-angle <N>`.
260
+
-**GPS targets**: projected onto ground plane at `y = -cameraHeight` (all targets at same level)
-**`override_height`**: relative to camera ground level (0 = ground, positive = above ground)
263
+
-**`camera_height`**: distance from ground to camera lens (default 2.5m)
264
+
265
+
Both `projector.calculateFlattenRatio()` and `projector.calculateMarkerSize()` accept a `heightOffset` parameter (default 0) used only by override targets via `overrideHeight`.
262
266
263
267
### Target Override Projection
264
-
Override markers use a **ground-plane model**: bearing + ground distance + height are projected onto `y = -cameraHeight + overrideHeight` plane, NOT spherical coordinates. Both `navigator.js` (calibration) and `navigation/navigator.js` (ebgeo_web) use `projectFromOverride()` for this. Override markers do **not** use GPS elevation delta — the height is manually controlled via a slider in the calibration UI. When `override_height` is NULL/0, the marker sits on the ground plane exactly where the user clicked.
268
+
Override markers use a **ground-plane model**: bearing + ground distance + height are projected onto `y = -cameraHeight + overrideHeight` plane, NOT spherical coordinates. Both `navigator.js` (calibration) and `navigation/navigator.js` (ebgeo_web) use `projectFromOverride()` for this. When `override_height` is NULL/0, the marker sits on the ground plane exactly where the user clicked.
269
+
270
+
### Slope Roll Estimation (Deprecated)
271
+
`scripts/estimate-slope-roll.js` previously estimated `mesh_rotation_z` from elevation data. This is deprecated — elevation data is no longer used for projection. The standalone script remains available with a deprecation warning; its `--clear` mode can reset `mesh_rotation_z` to 0.
265
272
266
273
## Calibration UI Architecture
267
274
@@ -318,12 +325,12 @@ app.js (orchestrator)
318
325
319
326
Migration (`scripts/migrate.js`) processes source data in 7 phases:
320
327
1. Read JSON metadata files from `METADATA/*.json`
321
-
2.Read JPG images from `IMG/*.jpg`
322
-
3.Assign photos to nearest project center by distance
0 commit comments