Bounding-box aggregate over a column of tpcpoint, tpcpatch, or tpcbox values. Returns the smallest tpcbox containing every input. Aggregating across distinct pcids raises an error — the bbox would be uninterpretable since dimensions are pcid-relative.
extent(tpcpoint) → tpcbox
extent(tpcpatch) → tpcbox
extent(tpcbox) → tpcbox
Temporal count and window count of overlapping rows at each timestamp. Result is a tint. All input rows must share the same temporal subtype (instant / sequence / sequence set).
tcount(tpcpoint) → tint, tcount(tpcpatch) → tint
wcount(tpcpoint,interval) → tint, wcount(tpcpatch,interval) → tint
Per-instant pcpatch point count, summed across rows. Distinct from tcount(tpcpatch), which counts the number of patches (always 1 per instant). tnpoints reads as "how many points were in the cloud at time t", the natural primitive for ingest-QC and density-over-time dashboards.
tnpoints(tpcpatch) → tint
Per-instant point density (numPoints / xy-bbox-area) summed across rows. Each pcpatch carries the inline PCBOUNDS (xmin / xmax / ymin / ymax) so the bbox-area term is read directly — no recomputation. A 1-point or co-linear patch yields +Infinity for that instant; filter with isfinite() in downstream queries if needed.
tdensity(tpcpatch) → tfloat
Combine multiple temporal values into a single one with all input instants merged in temporal order. All inputs must share the same pcid and subtype.
merge(tpcpoint) → tpcpoint, merge(tpcpatch) → tpcpatch
Streaming construction aggregates: appendInstant assembles instants into a sequence; appendSequence assembles sequences into a sequence set. Useful for trajectory loaders that consume rows in time order.
appendInstant(tpcpoint[,interp,maxt]) → tpcpoint, appendInstant(tpcpatch) → tpcpatch
appendSequence(tpcpoint) → tpcpoint, appendSequence(tpcpatch) → tpcpatch