3D GeoJSON viewer built on CesiumJS. Load GeoJSON files, explore them on a satellite terrain globe, and model causal dynamics with the FCM (Fuzzy Cognitive Map) tool.
Live demo: https://hcilab.no/geobed3d/ — password: Sintef0373
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
All data layers in GeoBed3D are sourced from free, open services — no proprietary data required.
| Layer | Source | Where to get it |
|---|---|---|
| 3D terrain | Cesium World Terrain (via Cesium Ion) | ion.cesium.com — free account |
| 3D buildings | Cesium OSM Buildings (via Cesium Ion) | ion.cesium.com — free account |
| Roads, labels, outdoor basemap | OpenStreetMap via Maptiler | maptiler.com — free tier |
| Satellite imagery | ESRI World Imagery (ArcGIS) | No key required — used as default basemap |
| Live sun & atmosphere | CesiumJS built-in | No key required |
| Geotagged photos | Wikimedia Commons | No key required — fetched by location automatically |
| Live AIS ship traffic | BarentsWatch | barentswatch.no — free account, register an API client |
1. Copy the config template and fill in your keys:
cp config.example.json config.jsonEdit config.json:
| Key | Where to get it |
|---|---|
CESIUM_TOKEN |
ion.cesium.com — free tier |
MAPTILER_KEY |
maptiler.com — free tier |
BW_CLIENT_ID / BW_CLIENT_SECRET |
barentswatch.no — free, format: email:AppName |
SITE_PASSWORD |
Any string to password-protect the app; leave empty to disable |
config.json is gitignored and never committed.
2. Run locally:
python3 server.pyOpen http://localhost:8765.
Deployed (PHP host): upload all files including config.json alongside proxy.php. The app works without any keys — terrain and basemap fall back to flat/ESRI satellite.
Sample files are in test_files/:
| File | What it tests |
|---|---|
test-geojson.geojson |
Standard GeoJSON — points, lines, polygons with styling properties |
test-fcm.geojson |
FCM (Fuzzy Cognitive Map) format — nodes + edges for causal map animation |
Drag and drop them into the viewer to try it out.
GeoBed3D reads standard GeoJSON with optional custom styling properties (color, title, note, noteimage, icon, etc.).
- Styling guide —
geojson-manual.html - Example file —
test_files/test-geojson.geojson
Load a GeoJSON FeatureCollection where Point features are nodes and a top-level edges array defines weighted causal links. Hit FCM to animate propagation to equilibrium.
- Example file —
test_files/test-fcm.geojson
- More open data — expand built-in data layers: weather, elevation profiles, administrative boundaries, and additional free global datasets
- Live data integrations — connect to external APIs for real-time feeds beyond AIS: ocean sensors, metocean data, IoT streams, and vessel tracking services
- Bathymetry and ocean focus — dedicated support for underwater terrain, seafloor mapping, and ocean data visualization as a first-class use case
- Session persistence — save and restore the state of loaded layers, active toggles, and camera position across sessions
- CMS / API layer — a backend content and data management layer for GeoBed3D, enabling organisations to publish, version, and serve geospatial datasets directly to the platform (Sanity.io? Pocketbase?)
This platform was created by the HCI group of SINTEF Digital and XR Lab Norway as a testbed for projects with geographical data and related visualizations.















