Estas funciones derivan un valor espacial del cuerpo en movimiento. centroid y bodyPointTrajectory devuelven puntos temporales que siguen una posición a lo largo del tiempo; convexHull devuelve una geometría estática.
Devuelve el centroide del cuerpo en movimiento como un punto temporal
centroid(trgeometry) → tgeompoint
SELECT asText(centroid( trgeometry 'Polygon((0 0, 1 0, 1 1, 0 1, 0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(2 0),0)@2001-01-02]')); -- [POINT(0.5 0.5)@2001-01-01, POINT(2.5 0.5)@2001-01-02]
Devuelve la envolvente convexa del área recorrida por el cuerpo en movimiento
convexHull(trgeometry) → geometry
SELECT ST_GeometryType(convexHull( trgeometry 'Polygon((0 0, 1 0, 1 1, 0 1, 0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(2 0),0)@2001-01-02]')); -- ST_Polygon
Devuelve la trayectoria en el marco del mundo de un punto del marco del cuerpo transportado por la geometría rígida en movimiento
bodyPointTrajectory(trgeometry,geometry) → tgeompoint
El punto se expresa en el marco local de la forma de referencia y la pose variable en el tiempo se le aplica en cada instante. El resultado tiene la interpolación de la geometría rígida temporal. Con interpolación lineal, el resultado es exacto a lo largo de un segmento en el que el cuerpo no rota. A lo largo de un segmento en el que el cuerpo rota, el punto sigue una curva, que el resultado reemplaza por el segmento que une sus posiciones en los dos instantes, como en el segundo ejemplo a continuación, donde el punto se desplaza de (1 0) a (0 1) a lo largo de un cuarto de circunferencia.
SELECT asText(bodyPointTrajectory( trgeometry 'Polygon((0 0, 1 0, 1 1, 0 1, 0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(2 0),0)@2001-01-02]', geometry 'Point(0 0)')); -- [POINT(0 0)@2001-01-01, POINT(2 0)@2001-01-02] SELECT asText(round(bodyPointTrajectory( trgeometry 'Polygon((0 0, 1 0, 1 1, 0 1, 0 0)); [Pose(Point(0 0),0)@2001-01-01, Pose(Point(0 0),1.5707963267948966)@2001-01-02]', geometry 'Point(1 0)'), 6)); -- [POINT(1 0)@2001-01-01, POINT(0 1)@2001-01-02]