EntityCollection performance vs BillboardCollection + LabelCollection

I am trying to plot a large number of entities (50k to 100k or more) and am interested what the best approach is with the latest Cesium?

Should I be using EntityCollection/CustomDataSource or a billboardCollection + a labelCollection

I don’t have hard numbers on benchmarks for these two collections. I think both should benefit from the same batching/optimizations. Cesium generally has been moving more towards 3D Tiles for high volumes of data. The idea there being to produce hierarchical levels of detail, so even if you have a 100 million buildings/models/entities, you won’t render all that detail when it’s too far to see anyway, but as you zoom in it’ll load more.

What kind of data are you representing?

Most of the time its location data of buildings based on a database search.

So usually its a symbol representing the building + a label with a CustomDataSource

Yeah I think this would definitely benefit from 3D Tiling. You can read a bit about 3D Tiles for buildings here:

https://cesium.com/3d-tiling-pipeline/3d-buildings/

This would involve authoring your data as CityGML or 3d models, and then uploading it to cesium.com/ion to tile it. This is how this New York demo works for example:

https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/?src=3D%20Tiles%20Feature%20Picking.html&label=All

Well, I really don't need anything 3d here as we are showing known symbols representing each building type..

So i really just need the billboards and labels.

I think in any case you’ll want to do some sort of tiling. Cesium’s support for large amounts of 3D data is currently a lot better than its 2D support, since other map libraries handle 2D quite well.

Have you tried putting the 100k entities/billboards in Cesium yet? It might work well with clustering:

https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/?src=Clustering.html

You can also enable the frames per second counter to see how well it’s performing by doing:

viewer.scene.debugShowFramesPerSecond = true;

``

I’d be curious to know if it works or what performance you’re seeing.

Thanks. I'll give clustering a try.

Quick questions on 3d tiles:

1. Can you dynamically update 3d tiles. Say I was showing airplane locations and wanted to quickly update billboards representing each one. Does 3d tiles have a way to do this or is it more about static data sets?

2. Do 3d tiles have something like billboard images where I can just put a flat image and have it always face the camera?

  1. Time dynamic 3D Tiles is definitely on the roadmap. There does exist a Sandcastle code example (https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/?src=Time%20Dynamic%20Point%20Cloud.html) of a time dynamic point cloud, but it is not yet an official part of the specification. See: https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/102
  2. Not yet. This would come with vector tiles support, which is also on the roadmap. See: https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/25