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
| Hidden |`hidden`| 0/1 | 0 | Whether target is hidden from navigation (per source→target pair) |
242
246
| Reviewed |`calibration_reviewed`| 0/1 | 0 | Whether calibration has been reviewed |
243
247
244
248
### Three.js Rotation Order
245
249
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.
246
250
251
+
### Elevation Delta in Projection
252
+
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).
253
+
254
+
### Slope Roll Estimation
255
+
`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>`.
256
+
247
257
### Target Override Projection
248
-
Override markers use a **ground-plane model**: bearing + ground distance are projected onto `y = -cameraHeight` plane, NOT spherical coordinates. Both `navigator.js` (calibration) and `navigation/navigator.js` (ebgeo_web) use `projectFromOverride()` for this.
258
+
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.
249
259
250
260
## Calibration UI Architecture
251
261
@@ -273,10 +283,10 @@ app.js (orchestrator)
273
283
3. Grid toggle — perspective grid on/off
274
284
4. Save/Discard buttons — enabled when dirty
275
285
5. Review actions — mark reviewed, reviewed → next
276
-
6.**Collapsible**: Parametros de Calibracao — 6 sliders (rotation_y/x/z, height, distance/marker_scale)
286
+
6.**Collapsible**: Parametros de Calibração — 6 sliders (rotation_y/x/z, height, distance/marker_scale)
277
287
7.**Collapsible**: Aplicar ao Projeto — batch update buttons
278
288
8.**Collapsible**: Targets (N) — clickable target list with override/hidden badges
0 commit comments