Public Space Catalogue Atlas

15,379 objectsengineeringspaceeuclidean

A TMAP of 15,379 objects from the public CelesTrak satellite catalog, each represented as a four-feature z-scored orbital fingerprint (perigee, apogee, inclination, and a derived regime axis) with Euclidean metric. Orbital regimes separate almost perfectly on the tree: only 12 of 15,378 edges (0.1%) cross a regime boundary (LEO 94.7%, GEO 3.8%, MEO 1.2%, HEO 0.3%), giving a mean subtree purity of 0.998. Ownership is more porous (13.3% owner-boundary edges among owners with 50+ objects) - the US accounts for 75.1% of tracked objects, with Starlink alone making up 10,313 of them. Sample tree paths, like ISS (ZARYA) to STARLINK-1008 in 179 hops, trace real orbital-regime transitions rather than straight-line distance.

Public Space Catalogue AtlasOpen full page
Loading interactive demo…

How it was made

generate.pypython
import numpy as np
from tmap import TMAP
from tmap.graph.analysis import boundary_edges, subtree_purity

# Four-feature orbital fingerprint, z-scored: perigee, apogee, inclination, regime axis
X = orbital_fingerprint(perigee_km, apogee_km, inclination_deg)

model = TMAP(metric="euclidean", n_neighbors=20, seed=42).fit(X)

purity = subtree_purity(model.tree_, orbital_regime, min_size=20)
print(f"Mean subtree purity by regime: {purity.mean():.3f}")

viz = model.to_tmapviz()
viz.add_label("object", object_names)
viz.add_color_layout("orbital regime", orbital_regime, categorical=True, color="tab10")
viz.add_color_layout("owner", owner_country, categorical=True, color="tab20")
viz.write_html("satellite_catalog.html")