If you’ve ever explored a 3D building model or point cloud in a browser — chances are you were using CesiumJS, even if you didn’t know it. It’s the open-source engine that powers browser-based 3D geospatial visualization at scale.
Here’s what it is, how it works, and how it fits into a surveyor’s delivery workflow.
What is CesiumJS?
CesiumJS is an open-source JavaScript library for 3D geospatial visualization on the web. It was created by Analytical Graphics Inc. (AGI) in 2011, open-sourced in 2012, and has since become the industry standard for browser-based 3D mapping.
It’s used by:
- NASA (for mission visualization)
- The European Space Agency
- Google Earth (partially)
- National mapping agencies worldwide
- Urban planning platforms, military simulation systems, and — increasingly — spatial data delivery tools for surveyors
CesiumJS renders a globe (using accurate WGS84 ellipsoid geometry) and supports streaming of massive 3D datasets via the 3D Tiles specification. It runs in any modern browser, using WebGL for hardware-accelerated rendering.
What CesiumJS can display
| Data type | Format | Notes |
|---|---|---|
| Point clouds | 3D Tiles (.pnts) | Stream massive LiDAR datasets |
| Textured meshes | 3D Tiles (.b3dm, .glb) | Photogrammetry models |
| Terrain | Quantized Mesh | Global terrain, custom DTMs |
| Vector features | GeoJSON, KML, CZML | Boundaries, annotations |
| Imagery | WMS, TMS, WMTS, Bing, Google | Raster map layers |
| Time-dynamic data | CZML | Time-series spatial data |
For surveyors, the most relevant capabilities are:
- Streaming large point clouds (LiDAR, photogrammetry) via 3D Tiles
- Displaying orthomosaics as map layers
- Rendering photogrammetry meshes as textured 3D models
- Placing KML/KMZ annotations and boundaries
How CesiumJS streams large datasets
The key to CesiumJS’s performance is the 3D Tiles streaming architecture:
- The browser requests the root
tileset.jsonfile - CesiumJS evaluates which tiles are visible at the current camera position
- It requests only those tiles (starting with the lowest-LOD tiles that cover the viewport)
- As you zoom in or pan, higher-resolution tiles are requested on demand
- Tiles outside the viewport are unloaded to free memory
This means a 50 GB photogrammetry dataset can be navigated smoothly — you never try to load more than what’s currently visible at the current resolution.
The gap: CesiumJS is a library, not a product
Here’s the catch: CesiumJS is a JavaScript library. It does the rendering — but it doesn’t handle:
- Hosting your tile data (you need a CDN or storage bucket)
- User authentication (who can view the data)
- Sharing infrastructure (generating links, managing access)
- A built-in viewer UI (you need to build it yourself)
To use CesiumJS, you need to either:
- Build your own viewer — front-end development, CDN hosting, access control, share link generation. Significant engineering effort.
- Use Cesium ion — Cesium’s hosted platform. Upload your data, Cesium converts it and generates a viewer. Aimed at enterprise/developer use.
- Use a platform built on CesiumJS — like Swyvl, which uses CesiumJS under the hood but adds the sharing, hosting, and branding layer that surveyors actually need.
CesiumJS viewer controls
If you’re delivering a CesiumJS-based view to your clients, it helps to understand what they can do with it:
Navigation:
- Left click + drag: Rotate / orbit around a point
- Right click + drag: Zoom (or scroll wheel)
- Middle click + drag: Pan
Toolbar controls (depend on implementation):
- Home button: Return to initial camera position
- Geocoder: Search for a location by name
- Layer picker: Toggle imagery and terrain layers
- Scene mode toggle: Switch between 3D globe, 2D map, and Columbus view
Point cloud specific:
- EDL (Eye Dome Lighting): Enhances depth perception in point clouds — makes them much easier to read for non-technical viewers
- Point budget: Controls the maximum number of points rendered simultaneously (affects performance)
For client-facing viewers, simpler is better. A clean CesiumJS viewer with just the navigation controls and perhaps a measurement tool is more useful than one overloaded with GIS features that clients don’t understand.
Cesium ion vs. self-hosted vs. Swyvl
If you want to deliver your survey data via a CesiumJS viewer, here are your practical options:
Cesium ion
- Cost: $25/month for basic; $500/month for professional
- Workflow: Upload data to cesium.com/ion → Cesium converts to 3D Tiles → embeddable viewer
- Best for: Developers building applications on top of Cesium; enterprise teams with technical staff
- Limitation: Viewer customisation requires front-end development; not designed for surveyor delivery workflows
Self-hosted CesiumJS
- Cost: Free (open source) + hosting costs
- Workflow: Export 3D Tiles → upload to cloud storage → build viewer → configure sharing
- Best for: Teams with web development capability
- Limitation: Significant upfront investment; requires ongoing maintenance
Swyvl
- Cost: From $49/mo USD
- Workflow: Upload your spatial files → Swyvl converts and serves → share branded link with client
- Best for: Surveyors and drone operators who want professional delivery without infrastructure overhead
- Under the hood: CesiumJS for 3D meshes/tiles, Potree for point clouds
CesiumJS is exceptional technology — used for spacecraft trajectory visualization and urban digital twins. For surveyors, the value is that it brings that same capability to the browser, so your clients can experience their spatial data the way it deserves to be experienced. The question is just how much effort you want to spend on the infrastructure to make that happen.