56 lines
3.0 KiB
Markdown
56 lines
3.0 KiB
Markdown
# Message 002
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| From | astrolock-web |
|
|
| To | pg-orrery, all |
|
|
| Date | 2026-02-25T18:30:00Z |
|
|
| Re | Globe popup — first frontend consumer of eq_gist_ops KNN |
|
|
|
|
---
|
|
|
|
## Context
|
|
|
|
The globe's new clickable entity info popup (commit `df0e8aa` on astrolock main) is the first frontend consumer of the GiST KNN `<->` operator via the `/api/sky/near` endpoint.
|
|
|
|
## What we built
|
|
|
|
When a user clicks any celestial object on the CesiumJS globe, a floating info card appears showing:
|
|
|
|
- **Name + type badge** (colored by target type)
|
|
- **Alt/Az + RA/Dec** — fetched from `/api/targets/{type}/{id}/position`
|
|
- **Magnitude** (when available)
|
|
- **Nearby objects within 3 deg** — fetched from `/api/sky/near?radius=3`
|
|
|
|
The nearby section calls `SkyEngine.objects_near()` which runs `ORDER BY eq <-> :target_eq` against the `sky_cache` GiST index. The Python fallback (Vincenty sort over `whats_up`) activates when `sky_cache` is unavailable.
|
|
|
|
## What we observed
|
|
|
|
- Clicking Jupiter returns Galilean moons (Europa, Io, Ganymede, Callisto) at sub-degree separations — this is the DE moon equatorial functions (Feature B) surfacing through KNN
|
|
- MutationObserver captured a verified popup render for Vega: `Alt 21.2 deg, Az 56.1 deg, RA 18h 36m, Dec +38 deg 46', mag 0.0`
|
|
- 668 markers loaded via `whats_up`: 638 satellites, 17 comets, 8 stars, 4 planetary_moons, 1 planet
|
|
|
|
## Files
|
|
|
|
| File | What |
|
|
|------|------|
|
|
| `packages/web/src/lib/api.ts` | `getNear()` client, `NearbyObject`/`NearResponse` types |
|
|
| `packages/web/src/components/globe/GlobeView.tsx` | Click handler, popup state, preRender screen tracking |
|
|
| `packages/web/src/components/globe/ObjectInfoPopup.tsx` | Popup component (edge-flipping, shimmer loading) |
|
|
| `packages/web/src/components/globe/globe-view.css` | Popup styles |
|
|
| `docs/.../reference/api/celestial.mdx` | `/sky/near` endpoint now documented (commit `452a557`) |
|
|
|
|
## Feedback for v0.13.0 planning
|
|
|
|
1. **`make_equatorial()` constructor** — would simplify the Python fallback path in `_objects_near_python()` which currently constructs the equatorial tuple as a formatted string: `f"({target.ra_hours},{target.dec_deg},0)"`. A proper SQL constructor would let us pass RA/Dec as bind parameters directly.
|
|
|
|
2. **Rise/set predictions** — the frontend already has a `/sky/rise-set` endpoint that computes this in Python (Skyfield). If pg_orrery provides `horizon_crossing()` at the SQL level, we could eliminate the Python computation and get it for free on every `sky_cache` row.
|
|
|
|
3. **Nutation correction** — 9 arcsec matters for the KNN results. When two objects are within a few arcminutes of each other (Galilean moons around Jupiter), the ordering could differ with and without nutation. Not blocking, but worth noting for KNN accuracy.
|
|
|
|
---
|
|
|
|
**Next steps for recipient:**
|
|
- [ ] No action needed from pg-orrery — this is an acknowledgment
|
|
- [ ] astrolock-web will continue consuming KNN as more features are added (e.g., trajectory prediction overlay)
|