Earth from a Space Station

See Earth as astronauts do — a WebXR experience from the International Space Station (ISS) or the Chinese Space Station (CSS/Tiangong), orbiting in real time.

Available as an app on the Meta Horizon Store for Meta Quest 3, or directly through Meta Quest Browser.

Description

Look down at Earth from the International Space Station or the Chinese Space Station as they orbit in real time. High-resolution NASA imagery shows daylit terrain and city lights on the night side, with a realistic atmosphere visible at the horizon. The Moon, five naked-eye planets, and thousands of stars are in their correct positions. You can also observe a close flyby of the other station, visible as a bright point of light — just as it would appear to the naked eye at orbital distances.

Two camera views are available: forward and straight down. Points of interest — cities, mountains, lakes, rivers, deserts, islands and more — are labeled on the surface ahead of the station. Country borders, names, and flags are shown for all 195 countries (193 UN member states and 2 observer states). A time offset lets you rewind the simulation to see where the station was in the recent past. A heads-up display shows latitude, longitude, altitude, speed, and the country or sea below.

Controls

All controls use the right Quest 3 controller.

ActionQuest Controller
HelpB button
Switch stationA button
Cycle camera viewRight stick up
Toggle nightRight stick down
Toggle POI labelsRight stick left
Toggle countriesRight stick right
Toggle debug panelGrip + B button
Time offset* +1 minGrip + Right stick up
Time offset* −1 minGrip + Right stick down

* Time offset can only be negative, up to −5h59m.

Heads-Up Display

The HUD panel (right side in VR) shows the following information, updated in real time. The text color is white for the ISS and red for the CSS.

LineDescription
ISS / CSSActive station name and NORAD catalog number.
UTCCurrent time in UTC.
LATSub-satellite latitude (degrees N/S).
LONSub-satellite longitude (degrees E/W).
ALTAltitude above the WGS-84 ellipsoid in km.
SPDOrbital speed in km/h.
LOCCountry or sea name below the station, with local time if over land.
CSS / ISSDistance to the other station along the orbital arc in km.

Points of Interest

POI labels appear on the surface ahead of the station, showing capital cities and geographic features within range.

TypeColorCount
Capital cities Orange214 (193 + 2 observers + 2 non-members + 17 NSGT)
Mountains Red-orange47
Lakes Blue83
Seas & gulfs Blue35
Straits Blue13
Rivers Medium blue34
Deserts Yellow20
Islands Green64
Reefs Teal5

Technical Information

Station orbital positions are computed using the SGP4 algorithm from OMM (Orbit Mean-Elements Message) data sourced from Space-Track.org. A Cloudflare Worker fetches the OMM data every 2 hours and caches it in an R2 bucket; the application loads the cached OMM on page load and refreshes it when the page becomes visible again (e.g. when removing and re-wearing the VR headset). SGP4 propagation runs every frame, producing smooth orbital movement without polling any position API.

NASA provides 8 source GeoTIFF tiles (4 columns x 2 rows, each 21600x21600 pixels) that together form the full 86400x43200 Earth image at 500m/pixel resolution. Each source tile is split into 8 smaller tiles (2 columns x 4 rows) of 10800x5400, then downsampled to 5400x2700 (1000m/pixel), producing a final 8x8 grid of 64 tiles. There are 12 monthly day tile sets (Blue Marble Topography and Bathymetry) plus 1 night tile set (Black Marble city lights), for a total of 832 tiles (13 x 64). All tiles are stored as GPU-compressed KTX2 textures (UASTC format, transcoded to ASTC 4x4 on device). Each tile covers 45° longitude x 22.5° latitude, so a few tiles cover the entire visible hemisphere from orbital altitude. Low-resolution (2048x1024) equirectangular day and night KTX2 textures provide an instant recognizable Earth while high-resolution tiles load on demand. Tiles are loaded based on the station position with omnidirectional sampling, with an LRU cache and boundary preloading for seamless transitions. Custom GLSL shaders handle day/night blending at the terminator and additive city light rendering on the dark side.

The atmosphere uses a ray-sphere intersection test to distinguish the limb band (over space) from the overlay (over Earth surface). An exponential density falloff provides realistic thinning with altitude, and a Gaussian terminator function adds warm orange coloring at sunrise/sunset.

The coordinate system uses ECI (Earth-Centered Inertial) for station positioning. Earth textures are rotated by GMST (Greenwich Mean Sidereal Time) each frame to correctly align surface features. The sun direction is computed from the current date using astronomical formulas for solar declination and hour angle. The Moon position is computed using simplified Meeus lunar theory, and five naked-eye planets (Mercury, Venus, Mars, Jupiter, Saturn) use Keplerian orbital elements with secular perturbation rates — all from pure analytical formulas with the date as the only input. The starfield contains 5,070 stars from the HYG catalog with accurate positions and magnitude-based brightness.

Scale: 1 Three.js unit = 1 km. Earth radius = 6,371 units. ISS orbital altitude ~408 km, CSS orbital altitude ~390 km.

Contact

Please send an email to: info at metebalci dot com

License

© 2026 Mete Balci. All rights reserved.

Privacy Policy · Terms of Service · Credits