CesiumGS / CesiumGS/cesium

EntityClustering crashes when DataSource is removed

Open
#9,336 4 comments 0 reactions 0 assignees View on GitHub
category - clustering category - data sources category - entity type - bug
Dominant language
JavaScript
Stars
15.8k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

I'm using some parts of code from the Clustering Sandcastle demo. In my application I have several DataSources (one `CustomDataSource`, and potentially some `CzmlDataSources`). I'd like to cluster the elements in the data sources (mostly pins, but also points and labels) and I'm creating one `Cesium.EntityCluster` object:

https://github.com/vividos/WhereToFly/blob/5cb867c4c9e89e7c6ab0660f5dcd2b13f05b0a45/src/App/Resources/Assets/map/mapView3D.js#L390

I'm setting the `EntityCluster` object for my `CustomDataSource`:
https://github.com/vividos/WhereToFly/blob/5cb867c4c9e89e7c6ab0660f5dcd2b13f05b0a45/src/App/Resources/Assets/map/mapView3D.js#L265

Now when adding CZML files to my map view, I'm also setting the clustering property of the just loaded `CzmlDataSource`:
https://github.com/vividos/WhereToFly/blob/5cb867c4c9e89e7c6ab0660f5dcd2b13f05b0a45/src/App/Resources/Assets/map/mapView3D.js#L963

Clustering works well, and I can even switch it on/off globally.

Now the map view crashes and stops rendering when I remove a CZML data source again:
https://github.com/vividos/WhereToFly/blob/5cb867c4c9e89e7c6ab0660f5dcd2b13f05b0a45/src/App/Resources/Assets/map/mapView3D.js#L1125

As soon as the scene is re-rendered, the following call stack is shown (CesiumUnminified is used here):
```
An error occurred while rendering. Rendering has stopped.
TypeError: Unable to get property '_textureAtlas' of undefined or null reference
TypeError: Unable to get property '_textureAtlas' of undefined or null reference
at Billboard.prototype.setImage (.../Cesium/Cesium.js:158459:5)
at image.set (.../Cesium/Cesium.js:158149:11)
at BillboardVisualizer.prototype.update (.../Cesium/Cesium.js:93141:9)
at DataSourceDisplay.prototype.update (.../Cesium/Cesium.js:204161:9)
at Viewer.prototype._onTick (.../Cesium/Cesium.js:300870:5)
at Event.prototype.raiseEvent (.../Cesium/Cesium.js:14081:9)
at Clock.prototype.tick (.../Cesium/Cesium.js:50418:5)
at CesiumWidget.prototype.render (.../Cesium/Cesium.js:294541:7)
at render (.../Cesium/Cesium.js:293797:13)
```
(I shortened the paths a bit).

I also tried setting the `clustering` property to `undefined` or to a newly created `Cesium.EntityCluster` object, but the crash stays the same.

I even tried to "force a re-cluster", just like shown in the sandcastle demo, setting `pixelRange` to 0 and back to the last value.

From the documentation I got the idea that sharing `EntityCluster` objects is possible, but maybe I'm just doing something wrong. Thanks for helping in advance!

Browser: This occurs in the UWP WebView (I think it's based on Edge, but I'm not sure), and in the Android WebView, which uses the installed Chrome.

Operating System: Windows 10 / Android 11

Contributor guide

Open the contributing guide

Research direction

Reproduce the crash using the linked mapView3D.js flow: share an EntityCluster, add a CZML data source, then remove it and allow the scene to render. Start from the BillboardVisualizer and DataSourceDisplay entries in the reported call stack. Done means removing the CZML source no longer stops rendering or causes the _textureAtlas error.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
computer-graphics, frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.