Files
star-map/src/assets/textures
SenrokaiandClaude Opus 5.5 321540ed91 Merge the solar-system branch, so the star catalogue lands on the sky it now shares
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>
2026-09-30 22:07:34 +02:00
..
@
2026-08-03 16:50:10 +02:00

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):

  1. 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%.
  2. 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.
  3. 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 = 180 over an image centred on 0.
  4. 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).