Both branches changed the system view's star, the body card's provenance line, the exoplanet fetch and the ETL's validators. Resolved by keeping both sides: - The system view's star is the catalogue's (its own radius and temperature, a limb-darkened surface in its colour) and turns like a planet when it is the Sun (the solar branch's IAU pole and 25.38-day turn), keyed on SUN_STAR_ID, since the catalogue branch dropped the scene's own SOL_STAR_ID. Framing takes the outermost thing drawn (an eccentric orbit's aphelion, from the solar branch) and the star's radius for a giant (from the catalogue). The solar branch's comment about a halo is dropped: there has been none since #33. - The card's no-temperature sentence is the catalogue's (the host's luminosity or the orbit's size, not "not in the catalogue", which holds for 27 planets) and ends with the solar branch's reason why no image is used (a point of light for the 101 imaged planets, none for the rest). - fetchExoplanets reads the composite table and the distance errors (catalogue) and the imaged list (solar); build.ts runs both branches' validators. The data were regenerated by the full ETL on the merged code, from cache (nothing refetched): stars.bin, stars-meta.bin, stars-index.json and deepsky.json come out byte for byte the catalogue branch's, bodies.json the solar branch's, and exoplanets.json the catalogue branch's but for the imaged flag on 101 planets, WASP-108 b not among them. Unit suite 977 passed, the two branches' 870 and 837 over their shared 730, so no test was lost. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Body textures
bodies/ holds the surface maps src/app/shared/rendering/texture-catalog.ts wraps round the
bodies, keyed by their ids in bodies.json. Every map is simple cylindrical (equirectangular),
360 by 180 degrees, twice as wide as tall, with longitude 0 in the middle and east to the right,
which is the frame MAP_TO_BODY in body-orientation.ts puts onto the IAU body frame. The IAU
prime meridian (W) then turns longitude 0 to where it belongs at any date.
Solar System Scope (CC BY 4.0)
mercury, venus, earth, mars, saturn, uranus, neptune, moon, sun, saturn_ring
and the skybox come from the Solar System Scope texture pack, and jupiter from its 8k pack, via
Wikimedia Commons. See each file's Commons page for the original credit line.
venus.jpg is kept turned 180 degrees from the pack's file, which is the Magellan radar map with
south up and east to the left: there Maxwell Montes (65.2 N, 3.3 E in the IAU Gazetteer), the
brightest feature north or south of 50 degrees, sat at 63 S, 9 W, with Lakshmi Planum east of it
instead of west. Turned back (PIL ROTATE_180, re-saved on the file's own quantisation tables, 0.03
grey levels from the exact turn), its brightest point is at 63.7 N, 8.3 E, with Lakshmi to the west.
texture-catalog.spec.ts pins the checked file's SHA-256.
saturn_ring.png is a 1 280 by 78 px strip. Its x axis runs straight out from Saturn: read off its
alpha, the C ring's inner edge (74 490 km) is at px 91, the B ring's inner and outer edges (92 000
and 117 580 km) at 404.5 and 860, the A ring's outer edge (136 775 km) at 1 204 and the F ring
(140 180 km) at 1 267.5, all within 1.8 px of 55.9 km a pixel. So its left edge stands for
69 400 km and its right edge for 141 000 km (SATURN_RING_INNER_KM, SATURN_RING_OUTER_KM). The
Cassini Division's outer edge (122 170 km) is drawn 30 px (1 700 km) too far in.
Mission mosaics (public domain)
Each was downloaded from the URL below and processed the same way (script:
build_maps.py, kept with the measurements outside the repository):
- Pixels the source leaves unmapped (value 0 in every band, its no-data value) are set to one
flat grey: the mean of the mapped surface. They are never filled with invented terrain. Titan's
source marks its largest gap another way, with a flat grey of its own (147 and 148, its two
commonest values; "the uniform gray area in the northern hemisphere indicates a gap in the
imaging coverage", PIA19658), which the table counts as unmapped too: 1.09% of
titan.jpg's pixels, 0.87% of the sphere, where its zeros alone were 0.02%. - Downsampled by area averaging (PIL
BOX) to 2 048 by 1 024 for bodies over 1 000 km in radius and 1 024 by 512 for the rest. - Rolled half a turn where the source is centred on longitude 180, so longitude 0 is in the
middle. Every source already has east to the right. The centre was read from each file's
GeoTIFF tags (central meridian plus the tie point of its left edge), not from its label: Rhea's
and Enceladus's labels say
CENTER_LONGITUDE = 180over an image centred on 0. - Saved as JPEG at quality 85 (Europa 82, to stay under 400 KB), greyscale where the source is.
Each was then checked by eye against the IAU Gazetteer: the named feature lies where its coordinates put it on the processed map. "Black" is the share of pixels darker than 8 of 255 after processing; the disc photographs dropped in PR #33 were 20-43% black sky.
Their brightness is the mosaics' own, contrast-stretched frame by frame to show terrain: it places
features, not albedo. Iapetus shows it most. Its leading hemisphere, Cassini Regio, has an albedo of
0.03-0.05 and its trailing one 0.5-0.6 (NASA), about a tenth; on iapetus.jpg, between 30 S and
30 N, the leading side (30-150 W) averages 83.4 of 255 and the trailing (30-150 E) 108.2, a ratio of
0.77, as in the USGS source (83.3 and 108.1) and the DLR PDS map. So the drawn Iapetus is a shade
darker on one side, where the real one is coal against snow. No map here was rescaled to published
photometry.
| Map | Source | Mission, credit | Checked against | Unmapped (grey) | Black | Size |
|---|---|---|---|---|---|---|
phobos.jpg |
USGS Phobos Viking Mosaic 40ppd (DLR controlled) | Viking Orbiter, with Mars Express images; P. Stooke after Simonelli et al. 1993, PDS Stooke Small Bodies Maps | Stickney (1 N, 49 W) | 0.03% | 0.008% | 1024x512, 119 KB |
deimos.jpg |
PDS SBN Stooke Small Bodies Maps V3.0, Deimos simple cylindrical mosaic, 20 px/deg | Viking Orbiter, with MRO HiRISE; P. Stooke and colleagues, control after P. Thomas (Cornell) | Swift (12.5 N, 1.8 E); the set's leading and trailing sheets (see below) | 0% | 0% | 1024x512, 55 KB |
io.jpg |
USGS Io Galileo SSI-Voyager Global Mosaic, colour merge, 1 km | Galileo SSI and Voyager; USGS Astrogeology | Pele, Loki, Prometheus | 0.02% | 0% | 2048x1024, 283 KB |
europa.jpg |
USGS Europa Voyager-Galileo SSI Global Mosaic 500 m | Voyager and Galileo SSI; Archinal et al., USGS | Pwyll (25 S, 271 W) | 4.33% (polar gaps) | 0% | 2048x1024, 386 KB |
ganymede.jpg |
USGS Ganymede Voyager-Galileo SSI Colour Global Mosaic 1.4 km | Voyager and Galileo SSI; USGS | Osiris, Tros, Galileo Regio | 3.63% (polar gaps) | 0% | 2048x1024, 363 KB |
callisto.jpg |
USGS Callisto Voyager-Galileo SSI Global Mosaic 1 km | Voyager and Galileo SSI; USGS | Valhalla, Asgard | 3.90% (polar gaps) | 0% | 2048x1024, 344 KB |
mimas.jpg |
PDS COISS_3006, Cassini ISS cartographic map of Mimas | Cassini ISS; DLR and FU Berlin (Roatsch et al.), NASA PDS | Herschel (1 N, 112 W) | 0.01% | 0.042% | 1024x512, 155 KB |
enceladus.jpg |
USGS Enceladus Cassini Global Mosaic 110 m | Cassini ISS; NASA/JPL/Space Science Institute | Ali Baba, Aladdin, Salih | 0.06% | 0.020% | 1024x512, 168 KB |
tethys.jpg |
USGS Tethys Cassini Global Mosaic 293 m | Cassini ISS; NASA/JPL/Space Science Institute | Odysseus, Penelope | 0.04% | 0.009% | 1024x512, 182 KB |
dione.jpg |
USGS Dione Cassini-Voyager Global Mosaic 154 m | Cassini ISS and Voyager; NASA/JPL/Space Science Institute | Creusa, Evander | 0.18% | 0.011% | 1024x512, 195 KB |
rhea.jpg |
USGS Rhea Cassini-Voyager Global Mosaic 417 m | Cassini ISS and Voyager; NASA/JPL/Space Science Institute | Inktomi, Tirawa | 0% | 0.003% | 1024x512, 128 KB |
titan.jpg |
USGS Titan Cassini ISS Global Mosaic 4 km (938 nm, through the haze) | Cassini ISS; NASA/JPL-Caltech/SSI | Xanadu, Shangri-La, Belet | 1.1% (48-68 N, 37 W to 25 E: the source's own flat grey, see step 1) | 0.078% | 2048x1024, 294 KB |
iapetus.jpg |
USGS Iapetus Cassini-Voyager Global Mosaic 783 m | Cassini ISS and Voyager; NASA/JPL/Space Science Institute | Cassini Regio (leading side, 90 W), Engelier | 0% | 0.019% | 1024x512, 159 KB |
phoebe.jpg |
PDS COISS_3001, Cassini ISS cartographic map of Phoebe | Cassini ISS; DLR and FU Berlin (Roatsch et al.), NASA PDS | Jason (16 N, 318 W) | 20.41% (the north) | 0.344% (shadows) | 1024x512, 78 KB |
triton.jpg |
USGS Triton Voyager 2 Global Colour Mosaic 600 m (PIA18668) | Voyager 2; P. Schenk, NASA/JPL/LPI | Leviathan Patera; southern cap | 38.59% (the north Voyager 2 never saw) | 0% | 2048x1024, 205 KB |
ceres.jpg |
USGS Ceres Dawn FC Global Mosaic, HAMO, Oct 2015 | Dawn Framing Camera; DLR, NASA/JPL | Occator (20 N, 239 E), Haulani (6 N, 11 E) | 3.60% (south pole) | 0.049% | 1024x512, 165 KB |
pluto.jpg |
USGS Pluto New Horizons LORRI-MVIC Global Mosaic 300 m | New Horizons; NASA/JHUAPL/SwRI/LPI | Sputnik Planitia (175 E, across 180), Cthulhu, Burney | 31.92% (the south, in winter dark in 2015) | 0.501% (Cthulhu) | 2048x1024, 297 KB |
charon.jpg |
USGS Charon New Horizons LORRI-MVIC Global Mosaic 300 m | New Horizons; NASA/JHUAPL/SwRI/LPI | Mordor Macula (north pole), Organa | 34.02% (the south) | 0.549% (Mordor) | 1024x512, 72 KB |
Licence: every source above is NASA mission imagery, published by USGS Astrogeology or the NASA PDS. The USGS metadata gives access constraints of "public domain" (Io, Triton, Enceladus, Tethys, Dione, Rhea, Iapetus, Ganymede, Phobos) or "none" (the rest), with the use constraint "please cite authors", which the credits column does. Io's colour is Galileo's violet, green and 756 nm filters, which USGS says the eye would see "similar but much more muted"; Ganymede's is the Galileo and Voyager colour mosaic; Triton's is orange, violet and ultraviolet shown as red, green and blue (Smith et al. 1989). Phoebe is irregular (a 106.6 km sphere here), and its map keeps the deep shadows of a single flyby. Phobos's source notes that where images lit from opposite sides meet, the seam was blended for appearance, not geometry. Deimos's map is from the NASA PDS Small Bodies Node archive (MULTI-SA-MULTI-6-STOOKEMAPS-V3.0), which states no use restriction; the credit column cites its author.
Deimos's map says only "0 longitude at the center", not which way longitude runs, and USGS's own
copy of the older version (wms_basemaps/Deimos/deimoscyl4.jgw) is georeferenced with longitude 0
at its left edge instead. Its frame was settled on the body. Read with longitude 0 in the middle
and east to the right, and drawn as a globe seen from outside, north up, the hemisphere centred at
90 E matches, unmirrored, the sheet of the same set that Stooke titles "trailing side" and numbers
270 (270 W), and the one centred at 90 W matches his "leading side" at 90. A synchronous prograde
moon trails at 90 E and leads at 90 W, so that reading is the right one; read the USGS way, the
two sheets would land on the wrong hemispheres. A 1 km depression lies at Swift's Gazetteer
position (12.5 N, 1.8 E), near the middle; Voltaire (22 N, 3.5 W, 1.9 km) could not be picked out.
Longitudes follow each body's IAU prime meridian, which the checks above confirm on the maps. For Pluto and Charon that is the right-hand-rule pole of the WGCCRE 2015 report, which New Horizons' maps also use: the Charon-facing hemisphere is centred on longitude 0 and Sputnik Planitia sits on the far side, near 180.
Left out
- Miranda, Ariel, Umbriel, Titania, Oberon. Voyager 2 saw only their southern hemispheres, and no public-domain map of them exists at USGS or the PDS. The best maps (P. Schenk 2020, USRA repository, hdl.handle.net/20.500.11753/1687) carry no licence.
- Hyperion, Nereid, Proteus, Eris, Haumea, Makemake. No public-domain photographic map in simple cylindrical projection (Hyperion's USGS basemap is a relief rendering, not a mosaic).