Highlight and show an attribute as label on map by hover in Cesium
Personal
                  
                      JavaScript
                    
                    
                    
                      CesiumJS
                    
                    
                  - sets a nameOverlay HTML object to show attributes
 - assign a custom style to highlight a selected instance of 3DTiles
 - checks available attributes of an instance
 
sets a nameOverlay HTML object to show attributes
assign a custom style to highlight a selected instance of 3DTiles
checks available attributes of an instance
Description :
Simple Expression :
// HTML overlay for showing feature name on mouseover
const nameOverlay = document.createElement('div');
// ...
// Pick a new feature
let pickedFeature = viewer.scene.pick(movement.endPosition);
// ...
// Highlight the feature if it's not already selected.
if (pickedFeature !== selected.feature) {
    highlighted.feature = pickedFeature;
     Cesium.Color.clone(pickedFeature.color, highlighted.originalColor);
    pickedFeature.color = Cesium.Color.RED;
}
Example :
// Grant CesiumJS access to your ion assets
Cesium.Ion.defaultAccessToken = "XXX";
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.scene.globe.depthTestAgainstTerrain = true;
try {
  const default_style = new Cesium.Cesium3DTileStyle({
    "show" : "true",
    "color" : "color('#40E0D0')"
  });
  const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(2734145);
  viewer.scene.primitives.add(tileset);
  await viewer.zoomTo(tileset);
  tileset.style = default_style;
} catch (error) {
  console.log(error);
}
// HTML overlay for showing feature name on mouseover
const nameOverlay = document.createElement('div');
viewer.container.appendChild(nameOverlay);
nameOverlay.className = 'backdrop';
nameOverlay.style.display = 'none';
nameOverlay.style.position = 'absolute';
nameOverlay.style.bottom = '0';
nameOverlay.style.left = '0';
nameOverlay.style['pointer-events'] = 'none';
nameOverlay.style.padding = '8px';
nameOverlay.style.backgroundColor = 'black';
// Information about the currently selected feature
const selected = {
  feature: undefined,
  originalColor: new Cesium.Color()
};
// An entity object which will hold info about the currently selected feature for infobox display
const selectedEntity = new Cesium.Entity();
const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
// Information about the currently highlighted feature
const highlighted = {
  feature: undefined,
  originalColor: new Cesium.Color()
};
// On mouse over, display all the properties for a feature in the console log.
handler.setInputAction(function onClick(movement) {
    // If a feature was previously highlighted, undo the highlight
    if (Cesium.defined(highlighted.feature)) {
        highlighted.feature.color = highlighted.originalColor;
        highlighted.feature = undefined;
    }
    const feature = viewer.scene.pick(movement.endPosition);
    if (feature instanceof Cesium.Cesium3DTileFeature) {
      // Pick a new feature
      let pickedFeature = viewer.scene.pick(movement.endPosition);
      if (!Cesium.defined(pickedFeature)) {
            nameOverlay.style.display = 'none';
            return;
        }
      try {
        /*
        const propertyIds = pickedFeature.getPropertyIds();
        const length = propertyIds.length;
        for (let i = 0; i < length; ++i) {
            const propertyId = propertyIds[i];
            console.log(`${propertyId}: ${pickedFeature.getProperty(propertyId)}`);
        }*/
        // A feature was picked, so show it's overlay content
        nameOverlay.style.display = 'block';
        nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + 'px';
        nameOverlay.style.left = movement.endPosition.x + 'px';
        // Following name setter would work for CityGML based 3DTiles
        let name = '('+ pickedFeature.getProperty('FileName') + ') - ' + pickedFeature.getProperty('NodeName');
        if (!Cesium.defined(name)) {
            name = pickedFeature.getProperty('id');
        }
        //console.log(name);
        nameOverlay.textContent = name;
      }
      catch (error) {
        console.log(error);
      }
      // Highlight the feature if it's not already selected.
      if (pickedFeature !== selected.feature) {
          highlighted.feature = pickedFeature;
          Cesium.Color.clone(pickedFeature.color, highlighted.originalColor);
          pickedFeature.color = Cesium.Color.RED;
      }
    }
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
              	 2025 Jan