/ From CesiumJS

Coming from CesiumJS

The same things, written with Ortho Earth
3D Tiles · I3S · quantized-mesh terrain · glTF/GLB · WGS84 ellipsoid · CZML · the clock

Ortho Earth is a 3D globe map engine for the browser (WebGPU with a WebGL2 fallback) whose API follows MapLibre GL JS. Many of the things you do in CesiumJS have a counterpart here. This page lists them side by side: what you write in CesiumJS, what you write in Ortho Earth, and a page where you can see it running. All examples assume const map = await createGlobe({ target: "#map" }) from npm i @ortho-earth/globe.

3D data and terrain

TopicCesiumJSOrtho EarthSee it
3D Tilesawait Cesium3DTileset.fromUrl(url) + scene.primitives.add(tileset)await map.add3DTiles(url)The Netherlands in 3D (3DBAG tileset)
I3S scene layersI3SDataProvider.fromUrl(url)await map.addI3S(url)—
quantized-mesh terrainCesiumTerrainProvider.fromUrl(url)map.setTerrain({ source: { type: "quantized-mesh", url: ".../layer.json" } })quantized-mesh example
Cesium ion terrainCesiumTerrainProvider.fromIonAssetId(id)map.setTerrain({ source: { type: "quantized-mesh", ion: { assetId, accessToken } } })—
Ellipsoidal vs orthometric heightsheights above the ellipsoidheights: "ellipsoidal" (default; a bundled EGM96 geoid turns them into elevations) or "orthometric"—
glTF / GLB modelsModel.fromGltfAsync({ url, modelMatrix })await map.gadget.model(url, { at: [lon, lat], heading, scale }) — a CESIUM_RTC or ECEF placement in the file winsGLB models
three.js in the scene—map.addThree({ three, module }) — runs in the render worker, on the same camera, hidden by terrain and buildings3D Tiles with three.js

The globe and the camera

TopicCesiumJSOrtho EarthSee it
WGS84 ellipsoidEllipsoid.WGS84 (always)createGlobe({ ellipsoid: true }) or ?ell=1; "auto" (default) uses the ellipsoid on capable desktops. Measurements are always WGS84Japan on the ellipsoid
Fly the cameracamera.flyTo({ destination })map.flyTo({ center: [lon, lat], zoom, pitch, bearing })Globe
Set the cameracamera.setView({ destination, orientation })map.jumpTo({ … }) or map.setCamera({ lng, lat, height, heading, pitch, roll })—
Follow a moving objectviewer.trackedEntity = entitymap.follow(target) — a point, a function of time, or the id of a loaded CZML trackSatellites
Look at a pointcamera.lookAt(target, offset)await map.lookAt(target)—

Time

TopicCesiumJSOrtho EarthSee it
The clockviewer.clockmap.clock — one clock for the night side, the stars, satellites and timed dataWorld clock
Clock rangeclock.clockRange = ClockRange.LOOP_STOPmap.clock.setRange(start, end, "loop") — "clamped", "loop", "unbounded" (the CZML names are accepted too)—
CZMLCzmlDataSource.load(url)Drop a .czml file on the map (map.gadget.dropFile()): sampled positions play on map.clock with the same interpolation (ECEF, linear / Lagrange); billboards, labels and paths are drawn while available; the document clock is copied to the map clockortho-japan (drop a file)
Sun and shadowsviewer.shadows = trueawait map.sunShadow({ mode: "instant" }) or "duration" (hours of shadow)—
Visibility analysis—map.viewshed() · map.lineOfSight(a, b)—

What works differently

The full list of methods is in the package's type definitions (@ortho-earth/globe/globe.d.ts) and the engine overview. Step-by-step setup is in Build with Ortho Earth.

@ortho-earth/globe · GPL-3.0 · Kenji Yoshida · 2026