Terrain Twin
An empty twin of a SITE rather than an asset: the ground itself is the subject, and readings arrive from stations scattered across it. Extends Digital Twin (so the whole sensor chain, the legend and the presentation tools come with it) and adds the terrain stack: the .hgt mesh, its elevation colormap and Elevation scalarbar, CRS coordinates, elevation profiles and hover readout — minus the ground grid, since the tile IS the ground. Load a tile from Studio's Terrain section (fetch by lat/lon from AWS's public SRTM mirror, or drop a .hgt), then wire the two kinds of heatmap this plate exists for. POINT HEAT: a marker can BE a heat source (markers.add with heatmap:{target:'id:<terrainId>'}), which paints a per-vertex distance falloff into the terrain through colorstack; give each station a binding from its sensor path to target.property 'intensity' and its reading drives that station's patch of ground live. Two settings decide whether the result is readable. heatBlend: markers defaults it to 'add' (colorstack's own default is 'alpha'), and additive sources SUM, so N stations read as one field rather than N unrelated dots — but additive can only brighten, so it needs headroom beneath it. Over an elevation ramp there is little where it matters: a snow-white peak can leave about 0.15, and a station there saturates to white and stops responding to its own reading at all. Prefer 'add' over a dark scene, and 'alpha' over a bright one — alpha never clips, at the cost that overlapping stations composite by priority instead of summing. heatRadius: several times the mesh's vertex spacing, or the falloff reads as a blocky diamond rather than a blob — but no larger than the real spacing between your stations, or they merge into one wash. WHOLE-SURFACE LEVEL: an axiscolormap item on the terrain with a binding to target.property 'offset' sweeps a ramp along an axis — a water table, snow line or wetting front that rises and falls with a reading, across ground no station stands on. Both are toggleable LAYERS from a legend, which renders as deck3d's own floating overlay widget rather than a docked panel: an entry attached to markers.setVisible switches a whole set of stations together, one attached to axiscolormap.update shows or hides the ramp and can carry an opacity slider, and one given a plain {targetId} toggles the terrain mesh. Aggregate feed fields turn many stations into the one number an operator watches (worst station, site mean); a threshold rule with revert:true latches into the alarm list; mode:'schedule' gives a diurnal cycle so a dry reading at 15:00 reads differently from the same one at 04:00. Nothing ships pre-placed: a sensor path is matched by plain string and nothing validates it, so a pre-wired station would read a path your site doesn't publish and sit at —.