CesiumJS CZML for real time data

I currently use Bing Aerial Imagery as my base layer and I create my own tile server using drone images. We would like to add real time data like weather changes and building status to this so I have two questions.

  1. How to add real time data , is czml the only way and the best way?
  2. I currently use the bing aerial imagery, so is it possible that I can get 3d terrain preferrably dsm atleast for an area my neighbourhood so it looks realistic? I need building and tree level elevations which makes is not solved by DEMs

Hi @Haadi_M1 thank you for contributing to the Cesium Community forums.

CZML is one option, but it’s not required and often not the best choice.

CZML and Entities is best for time‑tagged, moving, or frequently changing objects.

3D Tiles + metadata (recommended for buildings): building status (example: damage, occupancy, etc) is typically stored as per‑feature metadata and updated or restyled in real time without reloading geometry.
Related Docs: 3D Tiling – Cesium
Styling and Filtering 3D Tiles – Cesium

Dynamic imagery / raster overlays (which is great for weather): weather, heatmaps, flood extents, etc. are usually shown as imagery layers (TMS/WMTS/WMS) that refresh over time. You can tile your own imagery using our tilers or if you already know of a good data source where the data is hosted and served, you could pull from an external server into CesiumJS . Additionally, you could also pull in KML for weather related data if applicable. For example, the NHC produces KMLs for Hurricane related data that could be pulled into CesiumJS.
Related Docs: Visualizing Imagery – Cesium

Your question about DSM’s:

Yes, you can tile DSMs in Cesium. Ion supports uploading DSM or other elevation rasters and tiles them into streamable terrain. Just make sure you are using a supported format Terrain – Cesium

For true building + tree realism, the most common approaches are:

Photogrammetry to 3D Tiles (from drone imagery): this method for creating 3d tiles includes terrain, buildings, and vegetation in the 3d output. In Cesium Ion you can upload oblique and nadir images from a drone capture to create photogrammetry mesh, points cloud or Gaussian splats as 3d tiles
Related Docs: Create 3D Reality Models from Photos – Cesium

and more generally, 3D Tiling – Cesium

Overall, you can keep the Bing Maps Imagery as your basemap overlay and have your local DSM, photogrammetry and/or buildings in your scene. if you have a need to clip out areas please see.

Related Docs: Draping Imagery over 3D Tiles in CesiumJS – Cesium

Hide Regions of 3D Tiles or Terrain with Clipping Polygons – Cesium

Please let me know if you have any follow-up questions

Currently I use 2d bing aerial imagery as base and I get real time images from which I create the terrains and tiles.

The drawback is for the next set of images opendronemap always takes the entire set of images from that folder in case we might take images of a particular subsection we might lose the previously updated tiles and terrain.

So does cesium have a solution for this or is there any method you know of to store the latest updated tiles and not disregard previous updated tiles aswell unless both match?

Could czml be of any use in this considering we get real time images?
@Travis.Crowell

@Haadi_M1 CZML isn’t a good fit for this use case because it’s designed for time-dynamic visualization, not for incremental terrain or imagery updates.

CZML describes entities (points, polygons, models, imagery overlays) whose properties change over time, but it does not manage tiled datasets, versioning, or partial replacement of terrain/imagery. Each CZML load is effectively a full scene description, so it won’t help preserve previously generated terrain tiles while selectively updating only new drone imagery.

In your case, the core challenge is incremental reconstruction and tile persistence—making sure new photogrammetry outputs don’t overwrite or invalidate existing terrain unless they spatially overlap. That problem needs to be solved at the data processing and tiling level not at the visualization layer.

CZML can be useful for:

  • Visualizing real‑time sensor footprints, camera positions, or image capture locations

  • Showing temporal changes or status of data collection

But it cannot:

  • Merge or reconcile terrain tiles

  • Preserve previous tiles automatically

  • Stream partial terrain updates the way 3D Tiles or terrain formats do

So while CZML can complement a real‑time workflow for context or visualization, it won’t solve the underlying issue of incremental terrain updates.

so what would solve the issue @Travis.Crowell

@Haadi_M1 In practice, that means:

  • Generate terrain and imagery as tiles (for example, as 3D Tiles–based terrain or imagery tilesets).

  • When new drone imagery comes in, re‑tile only the affected area and publish it as:

    • a separate tileset layered on top, or

    • an updated tileset where only overlapping tiles are replaced.

Cesium can stream and blend multiple terrain/imagery tilesets at once, but it does not manage how photogrammetry tools like OpenDroneMap merge or persist data - that logic has to live upstream in your processing workflow.

So, at this time, the solution is incremental tiling + updating only the affected geographic areas

I have solved the incremental tiling issue, but now I am interested in the weird elevation issue,

Do you notice how the newly rendered tiles are elevated, the elevation is expected as bing aerial imagery is 2d and I am unable to get rid of the issue as cesiumjs only accepts a single terrain provider at a time. Is there any way to solve this?? Or nothing can be done?? @Travis.Crowell