USGS terrain for CesiumJS
Free 3D terrain for the contiguous United States from USGS 3DEP: 1 m lidar wherever USGS has it, 10 m everywhere else. No account, no API key.
Tiles are quantized-mesh 1.0 with vertex normals. A rebuild with a new mesher is in progress; see its progress map.
Use it
1. The client module Recommended
A small ES module (no dependencies) that reads the tile archives directly with HTTP range requests. It is the fastest option and costs nothing to serve, because every request is answered from Cloudflare's cache.
import { createUsgsTerrainProvider } from "https://kpterrain.com/sdk/usgs-terrain.js";
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.terrainProvider = await createUsgsTerrainProvider(Cesium);
Pass your Cesium namespace: the Cesium global, or import * as Cesium from "cesium".
Copy the file into your project if you prefer to pin a version.
2. Stock Cesium
Standard terrain URLs, for tools that only accept a terrain provider URL:
viewer.terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl(
"https://tiles.kpterrain.com/terrain/conus/", { requestVertexNormals: true });
Until the rebuild completes, this URL serves the previous dataset (built with Cesium Terrain Builder; S1M detail in fewer areas). It switches to the new data in place; the URL stays the same.
The data
| Coverage | Contiguous US. Zooms 0–15 from the USGS 1/3 arc-second (~10 m) DEM; zooms 13–17 from USGS S1M (1 m lidar) where it exists, blended into the 10 m data at its edges. Cesium refines zoom 17 for closer views. |
|---|---|
| Accuracy | Each tile stays within half of Cesium's per-level error up to zoom 15, a quarter at zoom 16 and 10 cm at zoom 17. Neighbouring tiles share their edges exactly (no cracks), and normals come from the source data. |
| Heights | NAD83(2011) ellipsoid heights in metres (NAVD88 + GEOID18). |
| Datum | Coordinates are NAD83(2011) labelled WGS84 with no datum shift (the EPSG:9774 null convention that GDAL, PROJ, Esri, USGS services and Cesium ion use), so the terrain lines up with NAD83 lidar and survey data. Data in an ITRF frame (raw GNSS, some imagery) sits about 1–1.5 m away horizontally. |
| Beyond US data | Canada, Mexico and the Canadian halves of the Great Lakes come from Copernicus GLO-90 (90 m); the ocean is at sea level. |
| Updates | New and updated USGS data is picked up within a day. |
| Format | Geographic TMS (EPSG:4326), quantized-mesh 1.0, oct-encoded vertex normals, gzip. Stored in PMTiles v3 archives (layer.json). |
Attribution
Show the credit the terrain provider supplies (Cesium does so automatically). Elevation data: U.S. Geological Survey 3D Elevation Program (public domain). Outside US coverage: Copernicus DEM GLO-90 © DLR e.V. 2010–2014 and © Airbus Defence and Space GmbH 2014–2018, provided under COPERNICUS by the European Union and ESA.
For AI agents
Step-by-step instructions for coding assistants and agents are at /llms.txt.