The traversedArea function returns the region the moving body covers over the trgeometry's time domain: the placements it takes, or the union of them when the function is asked for it.
Return the area traversed by the temporal rigid geometry
traversedArea(trgeometry,unary_union bool=false) → geometry
SELECT ST_AsText(traversedArea( trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0)); [Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(10 0), 0.0)@2001-01-02]')); -- MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)),((10 0,11 0,11 1,10 1,10 0))) SELECT ST_AsText(traversedArea( trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0)); [Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(10 0), 0.0)@2001-01-02]', true)); -- POLYGON((0 0,0 1,11 1,11 0,0 0))
The argument is false unless it is given, and the function then answers the placements themselves gathered into one geometry, a multipolygon for a body that is a polygon, which is what a caller that does its own post-processing wants. With unary_union = true they are dissolved into the region they cover.
Sampling caveat: the implementation samples at the input instants, so pure-translation segments are exact but the swept ribbon between two instants where a rotation happens is approximated by the convex hull of the two endpoint polygons. Up-sampling the tpose before constructing the trgeometry tightens the approximation.