Playground · research instrument
Live Earth
A rotating globe with real data underneath it — actual coastlines, an astronomically accurate day/night line, real current weather, and the ISS tracked from its real orbital elements. Drag to spin.
Independent research instrument — not claimed as MakerPortal shipped product code. Methods, equations, assumptions, and limitations are disclosed so you can inspect what the page does and does not establish.
Globe
Day / Night
The terminator and lighting are updated continuously from your clock using the Sun’s apparent position and Greenwich sidereal time. Times below read in MakerPortal’s office zone (San Francisco, PDT/PST) with UTC underneath, so a reading can be checked against either.
- Live time · office
- —
- —
- Subsolar point
- —
Live Weather
16 cities, real current conditions.
Snapshot fetched: 2026-09-14 04:04 PDT · 11:04 UTC
ISS Tracker
Keplerian propagation with first-order J₂ secular drift from real ISS orbital elements — not full SGP4. Measured against one: within ~56 km of the true ground track a day after the element epoch.
- Latitude
- —
- Longitude
- —
- Altitude
- —
- Speed
- —
Elements fetched: 2026-09-14 04:04 PDT · 11:04 UTC
What's real here, and what isn't
A globe looks simple until you ask where each pixel comes from. This one has four independent data pipelines — only one runs purely in your browser. Here is what is real, what is simplified, and where the math lives.
Coastlines
Real geometry, self-hosted
Natural Earth 110m public-domain polygons, converted to GeoJSON and served from /data/world-land-110m.json. No live fetch to a map tile server. Projection is d3.geoOrthographic with clipAngle , scale tied to canvas radius, updated on drag. We intentionally draw at low precision to keep frame rate while staying recognizable. Toggle wireframe vs filled — same geometry, two strokes.
Day / Night
Real astronomy from your clock
No API. We compute subsolar latitude and longitude from Julian Date . Steps: , mean longitude , mean anomaly , equation of center , apparent longitude, obliquity , right ascension , declination . Greenwich sidereal time from same gives subsolar longitude.
Terminator is the great circle where is sun vector, is surface point. We build orthonormal basis and sweep , . Night shading is per-pixel where is surface normal reconstructed from canvas plus viewer depth . Dot product sign decides day vs night, alpha ramps with . That is why terminator is not a hard line but soft with grazing illumination.
This is exact to for modern dates — more than enough to watch sunset sweep across continents as you drag.
Weather
Real observations, hourly-cached snapshot
Sixteen cities, real current conditions from Open-Meteo. After first paint from the committed seed, the browser swaps in /api/globe-data.json; the CDN caches it for one hour and may serve it stale for a day while revalidating. The server batches all coordinates into one request, so no upstream URL or credential policy lives in the client. That batch response is positional, so each row is checked against the coordinate the provider echoes back before it is published — a city can be dropped, but it can never be shown another city’s weather.
Temperature to color is piecewise linear interpolation through stops to C: deep blue cyan green amber red. Dot placed by projecting through same orthographic projection. Hidden behind globe if after rotation — d3-geo path returns null for backside, so cities disappear naturally as Earth spins, same as satellites.
Limitation: snapshot in time, not forecast. If you open at night and see C in Mumbai, that was current at last refresh, not predicted.
ISS Tracker
Real TLE, simplified propagator
The same cached route fetches the ISS TLE from CelesTrak. A weekly GitHub Action refreshes src/data/satellite.json only as an outage seed; it no longer drives a site rebuild every four hours. Line 1 contains epoch yyddd.ddd, and line 2 contains .
We parse rad/s, get semi-major axis from Kepler third law, km/s. Mean anomaly at now , solve Kepler by Newton iteration (15 iters), true anomaly , radius . Perifocal to inertial via , then ECEF via GMST rotation .
The propagator advances with their first-order secular rates before solving Kepler’s equation, then converts the result to WGS84 geodetic coordinates. The nodal regression is the dominant term a two-body model gets wrong, and adding it is worth measuring rather than asserting: graded against a reference SGP4 implementation on the same elements, the ground-track error is 56 km at 24 hours where two-body gives 439 km, and 300 km after a week where two-body gives 3,060 km. What remains missing is real: drag , periodic terms, higher harmonics, resonance, and maneuver handling. Use satellite.js for pass prediction. The trail is recomputed from −25 minutes to now every second.
Honesty ledger
- Coastlines — real shapes, fake shading. Orthographic is geometric idealization; no terrain, no atmosphere scattering.
- Day/night — real sun position, simplified scattering. Night texture is a procedurally tinted alpha mask, not city lights database.
- Weather — real temps at snapshot, not live, not forecast, 16 points only — spatial interpolation would be misleading so we show dots only.
- ISS — real TLE, simplified physics, measured error. Graded against a reference SGP4 implementation on the same elements, the ground track here lands about 2 km out 4 hours after the TLE epoch, 56 km out at 24 hours, and 300 km out after a week. Position is WGS84 geodetic and altitude is within 5 km of SGP4. Illustrative, never a pass-prediction source.
Anatomy of the globe
Three independent data pipelines drive one canvas. Here is what each pixel is actually doing.
The render pipeline
- 01
d3.geoOrthographic projection. The globe uses d3-geo's orthographic projection with clipAngle 90°, centered at (φ₀ = 18° tilt, λ₀ = variable spin). scale is tied to canvas radius. No WebGL — every line is drawn with Canvas 2D via d3.geoPath. Precision is 0.1° per d3 projection property, keeping tessellation light for smooth drag at 60 fps.
- 02
Coastlines from Natural Earth. 110m-resolution public-domain polygons served from /data/world-land-110m.json, fetched once at init with an AbortController for cleanup. Drawn as geopaths — wireframe mode strokes them, filled mode fills them. Day/night mode uses 0.72 opacity; weather/ISS modes dim to 0.4 to keep data layers legible.
- 03
Day/night painting. Every half-second, subsolar declination δ and longitude λ_s are computed from the Julian Date using the Astronomical Almanac formula. A 256×256 off-screen canvas pre-computes per-pixel sun-dot-product: for each visible disk pixel, the surface normal is reconstructed from screen (x,y) plus viewer depth, dotted with the sun vector. Negative dot = night, positive = day, with an alpha ramp for grazing illumination at the terminator edge. This is redrawn only when the solar minute changes or lambda0 shifts ≥ 0.2°.
Terminator great circle construction
Basis vectors u, v are orthonormal and perpendicular to sun direction s. The 180-point sweep traces the sunrise/sunset line across the globe. This line is what you see as the red curve — the exact boundary between illuminated and dark hemispheres.
Data overlays and interaction
- 01
Weather mode. The committed seed paints immediately; one cached same-origin response replaces it after load. Its 16 Open-Meteo locations arrive in a single upstream request. Temperature maps through 5 color stops (−15°C deep blue → 40°C red), and d3-geo clips backside dots.
- 04
ISS tracker. The cached same-origin response carries a real CelesTrak TLE. First-order J₂ rates advance Ω, ω, and M; 15 Newton iterations solve M = E − e sin E before the perifocal → ECEF and GMST rotations. The −25-minute trail is recomputed once per second.
- 05
Auto-rotation and drag. The globe spins at 2.4°/s by default. Dragging pauses auto-rotation (lambda0 updates from pointer delta). An IntersectionObserver pauses the rAF loop when the canvas is off-screen to save CPU. ThemeObserver on data-theme triggers redraw for dark/light mode.
Gear behind this build
Earth & orbital mechanics stack · 8 picks
Orbital hardware8
$399.98ModelLEGO 92176 Ideas NASA Apollo Saturn V Space Rocket and Vehicles, Spaceship Collectors Building Set with Display Stand [Amazon Exclusive], 14+ years
1:110 Saturn V with 1969 Apollo stages — build it while your virtual ship undergoes Lorentz contraction and relativistic Doppler shift of CMB to visible blue.
$28.95ModelMetal Earth Fascinations Premium Series International Space Station 3D Metal Model Kit Bundle with Tweezers
Steel ISS model — track the real ISS live on this globe's TLE orbit, then hold the model while it passes over your city at 7.66 km/s orbital velocity.
$399.00ModelMotorized Metal Solar System Model Kit, 600+ Precision Parts Mechanical Orrery with LED Sun, STEM Astronomy Engineering Building Kit for Adults, Planetary Gear Planetarium Desk Display
600+ precision metal parts, motor-driven planets on brass gear trains — a buildable mechanical computer tracing the same Newtonian choreography this page integrates with symplectic Yoshida 4th order.
$249.00ApparatusMOVA Self Rotating Globe, Earth with Clouds Classic (4.5")
Solar-powered, self-rotating satellite globe that spins continuously using ambient light and Earth's magnetic field — demonstrating Coriolis torque and gyroscopic rotation live.
$74.01BookOrbital Mechanics for Engineering Students: Revised Reprint (Aerospace Engineering)
Derives n-body equations, figure-eight choreography existence proof, and symplectic energy conservation — exactly the trajectory this page verifies stays bounded for 500 periods.
$39.99ModelReplogle Ready to Assemble Illuminated World 12" Diameter Globe, USA Cartography, Modern Acrylic Stand and Blue Ocean Globe Ball. Easy to assemble globe that shows both Political and Vegetative information including political borders and provincial borders, major ocean currents, detailed lakes, rivers, tributaries and canals. (Illuminated)
Backlit globe with constellation overlay — compare its static terminator to this page's dynamically computed solar declination and real-time weather overlay across 16 cities.
$57.75BookSatellite Orbits: Models, Methods and Applications
SGP4 and TLE propagation — this globe computes ISS position client-side from real TLE elements using the same Kepler + J2 math Montenbruck derives.
$31.63BookVisual Differential Geometry and Forms: A Mathematical Drama in Five Acts
Sequel to Visual Complex Analysis — explains how conformal warp preserves infinitesimal circles, which you see as grid squares stay square under holomorphic f(z).
Prices shown were retrieved from the Amazon Product Advertising API on 19 July 2026 and are indicative only — the price and availability on Amazon at the time of purchase apply.
More gear across every app: the full Gear list →
Two gotchas worth knowing
Orthographic depth clipping
d3.geoOrthographic with clipAngle 90° correctly omits geometry on the back half of the globe, but it does this per path segment — not per point. A long LineString that wraps around the back will be clipped into multiple visible arcs on the front. This is mathematically correct but can look like the ISS trail "jumps" when a portion of it moves behind the globe. The trail is re-sampled every second, so the jump smooths out.
Secular J₂ vs full SGP4
First-order J₂ removes the two-body propagator’s dominant plane-rotation error at very little code cost. It does not turn this into SGP4: atmospheric drag, short-period terms, higher gravity harmonics, third bodies, and maneuvers still accumulate error. “Illustrative, not precision tracking” remains the correct boundary.
Copyable: subsolar point & J₂ secular rates
The two compact equations at the center of the globe’s astronomy and orbit model.
JavaScript — subsolar point (declination, longitude)
function subsolarPoint(date) {
const jd = date.getTime() / 86400000 + 2440587.5;
const T = (jd - 2451545.0) / 36525;
const meanLon = ((280.46646 + T * (36000.76983 + 0.0003032 * T)) % 360 + 360) % 360;
const M = ((357.52911 + T * (35999.05029 - 0.0001537 * T)) % 360 + 360) % 360;
const eqCtr = Math.sin(M) * (1.914602 - T * (0.004817 + 0.000014 * T));
const appLon = meanLon + eqCtr - 0.00569;
const obliquity = 23.439291 - 0.0130041667 * T;
const ra = Math.atan2(Math.cos(obliquity) * Math.sin(appLon), Math.cos(appLon));
const decl = Math.asin(Math.sin(obliquity) * Math.sin(appLon));
const gmst = 280.46061837 + 360.98564736629 * (jd - 2451545.0);
return { decl, lon: ra - gmst };
}JavaScript — first-order J₂ secular rates
const J2 = 1.08262668e-3;
const RE = 6378.137; // km
function j2SecularRates({ a, e, i, n }) {
const p = a * (1 - e * e);
const cosI = Math.cos(i);
const q = J2 * n * (RE / p) ** 2;
return {
raanDot: -1.5 * q * cosI,
argpDot: 0.75 * q * (5 * cosI ** 2 - 1),
meanAnomalyDot:
n + 0.75 * q * Math.sqrt(1 - e * e) * (3 * cosI ** 2 - 1),
};
}Frequently asked questions
How accurate is the day/night terminator?
The terminator is computed from the Sun's apparent position using Julian Date, solar declination, and Greenwich sidereal time — the same astronomical formulas used in planetarium software. It is accurate to ~0.01° for modern dates, more than enough to watch sunset sweep across continents. The night shade is a per-pixel dot-product between the surface normal and sun vector, producing a soft transition rather than a hard line.
Why does the ISS trail sometimes clip at the horizon?
The ISS trail is a LineString projected through d3.geoOrthographic with clipAngle 90°. Points behind the globe (p_z < 0) are automatically omitted by d3-geo, so the trail appears to wrap around the visible hemisphere. This is the same mechanism that hides cities and coastlines on the back side of the Earth.
Is the ISS position accurate enough for pass prediction?
No, and the gap is measured rather than guessed. This simulation applies Keplerian motion plus first-order J₂ secular drift to real TLE elements, then reports WGS84 geodetic position. Graded against a reference SGP4 implementation on the same elements, its ground track is about 2 km out four hours after the element epoch, 56 km at 24 hours, and 300 km after a week; altitude stays within 5 km. Adding J₂ is what makes those numbers small — the two-body model it replaced is 439 km out at 24 hours and 3,060 km after a week — but drag, periodic J₂ terms, higher harmonics, maneuvers and lunar-solar perturbations are still absent. A visible pass lasts a few minutes, so tens of kilometres of along-track error is minutes of timing error. For precision tracking use satellite.js SGP4. This demo is for watching the ISS move, not for scheduling telescope passes.
How is weather data updated?
The browser fetches one same-origin endpoint cached at the CDN for an hour. That server route batches all 16 coordinates into one Open-Meteo request and fetches the ISS elements from CelesTrak, so the browser never calls either upstream directly. If an upstream is unavailable, the route serves the committed seed with its original timestamp instead of failing. The temperature-to-color mapping interpolates through five stops from −15°C (deep blue) to 40°C (red).
Why does the globe spin and can I control it?
The globe auto-rotates at 2.4°/second by default, giving a continuous view of all longitudes. You can pause rotation with the "Pause rotation" button, drag left/right to spin manually (horizontal drag maps to longitude delta × 0.3), and toggle between wireframe and filled rendering. The IntersectionObserver pauses the animation loop when the canvas is off-screen to save battery.
Shareable still
The instrument, captured—not illustrated.
This 16:9 frame is rendered from the real browser instrument above. It is the page's canonical preview for image search, link unfurls, and posts that need to show what the tool actually does.
Download 1280 × 720 JPEG
Continue the experiment