Transform to another subtype
tposeInst(tpose) → tposeInst tposeSeq(tpose) → tposeSeq tposeSeqSet(tpose) → tposeSeqSet
SELECT asText(tposeSeq(tpose 'Pose(Point(1 1), 0.5)@2001-01-01', 'discrete'));
-- {Pose(POINT(1 1),0.5)@2001-01-01}
SELECT asText(tposeSeq(tpose 'Pose(Point(1 1), 0.5)@2001-01-01'));
-- [Pose(POINT(1 1),0.5)@2001-01-01]
SELECT asText(tposeSeqSet(tpose 'Pose(PointZ(1 1 1), 0.5, 0.5, 0.5, 0.5)@2001-01-01'));
-- {[Pose(POINT Z (1 1 1),0.5,0.5,0.5,0.5)@2001-01-01]}
Transform to another interpolation
setInterp(tpose,interp text) → tpose
SELECT asText(setInterp(tpose 'Pose(Point(1 1),0.2)@2001-01-01','linear'));
-- [Pose(POINT(1 1),0.2)@2001-01-01]
SELECT asText(setInterp(tpose '{[Pose(Point Z(1 1 1),1,0,0,0)@2001-01-01],
[Pose(Point Z(2 2 2),0,0,0,1)@2001-01-02]}', 'discrete'));
-- {Pose(POINT Z (1 1 1),1,0,0,0)@2001-01-01, Pose(POINT Z (2 2 2),0,0,0,1)@2001-01-02}
Round the points and the orientations of the temporal pose to the number of decimal places
round({tpose,tposechain},integer=0) → {tpose,tposechain}
shiftTime({tpose,tposechain},interval) → {tpose,tposechain}
SELECT asText(round(tpose '{[Pose(Point(1 1.123456789),0.123456789)@2001-01-01,
Pose(Point(1 1),0.5)@2001-01-02)}', 3));
-- {[Pose(POINT(1 1.123),0.123)@2001-01-01, Pose(POINT(1 1),0.5)@2001-01-02)}
SELECT asEWKT(round(tposechain
'PoseChain(Pose(Point(1.123456789 2.123456789), 0.5))@2001-01-01', 3));
-- PoseChain(Pose(POINT(1.123 2.123),0.5))@2001-01-01
SELECT asEWKT(shiftTime(tposechain 'PoseChain(Pose(Point(1 1), 0.5))@2001-01-01',
interval '1 day'));
-- PoseChain(Pose(POINT(1 1),0.5))@2001-01-02
Return a temporal value translated by given offsets
translate({tpose,tposechain},deltax float,deltay float,deltaz float=0)
→ {tpose,tposechain}
A vertical offset takes a two-dimensional value out of its plane, so the result is three-dimensional.
The chain of every instant moves its first link, which is expressed in the outer frame of the chain, and keeps the others.
The motion is a planar map, so a geodetic value raises an error.
SELECT asText(translate(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 1, 2), 6); -- [Pose(POINT(2 3),0.3)@2001-01-01, Pose(POINT(4 4),1.1)@2001-01-02] SELECT asText(translate(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 1, 2, 3), 6); /* [Pose(POINT Z (2 3 3),0.988771,0,0,0.149438)@2001-01-01, Pose(POINT Z (4 4 3),0.852525,0,0,0.522687)@2001-01-02] */
Return a temporal value rotated counter-clockwise about the origin or about a point
rotate({tpose,tposechain},angle float) → {tpose,tposechain}
rotate({tpose,tposechain},angle float,x0 float,y0 float) → {tpose,tposechain}
The chain of every instant moves its first link, which is expressed in the outer frame of the chain, and keeps the others.
The motion is a planar map, so a geodetic value raises an error.
SELECT asText(rotate(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7, 1, 1), 6); -- [Pose(POINT(1 1),1)@2001-01-01, Pose(POINT(1.885467 3.053278),1.8)@2001-01-02] SELECT asText(rotate(tposechain '[PoseChain(Pose(Point(1 1),0.3),Pose(Point(2 0),0.5))@2001-01-01, PoseChain(Pose(Point(3 2),1.1),Pose(Point(2 0),0.5))@2001-01-02]', 0.7, 1, 1), 6); /* [PoseChain(Pose(POINT(1 1),1),Pose(POINT(2 0),0.5))@2001-01-01, PoseChain(Pose(POINT(1.885467 3.053278),1.8),Pose(POINT(2 0),0.5))@2001-01-02] */
Return a temporal value rotated counter-clockwise about the x axis
rotateX({tpose,tposechain},angle float) → {tpose,tposechain}
The rotation takes a two-dimensional value out of its plane, so the result is three-dimensional: each position gains the height the rotation gives it, and each orientation is the rotation composed with the angle about the vertical that the value states.
The chain of every instant moves its first link, which is expressed in the outer frame of the chain, and keeps the others.
The motion is a planar map, so a geodetic value raises an error.
SELECT asText(rotateX(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7), 6); /* [Pose(POINT Z (1 0.764842 0.644218),0.928825,0.339047,-0.051242,0.140378)@2001-01-01, Pose(POINT Z (3 1.529684 1.288435),0.800838,0.292329,-0.179228,0.490998)@2001-01-02] */
Return a temporal value rotated counter-clockwise about the y axis
rotateY({tpose,tposechain},angle float) → {tpose,tposechain}
The rotation takes a two-dimensional value out of its plane, so the result is three-dimensional: each position gains the height the rotation gives it, and each orientation is the rotation composed with the angle about the vertical that the value states.
The chain of every instant moves its first link, which is expressed in the outer frame of the chain, and keeps the others.
The motion is a planar map, so a geodetic value raises an error.
SELECT asText(rotateY(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7), 6); /* [Pose(POINT Z (0.764842 1 -0.644218),0.928825,0.051242,0.339047,0.140378)@2001-01-01, Pose(POINT Z (2.294527 2 -1.932653),0.800838,0.179228,0.292329,0.490998)@2001-01-02] */
Return a temporal value rotated counter-clockwise about the z axis
rotateZ({tpose,tposechain},angle float) → {tpose,tposechain}
The chain of every instant moves its first link, which is expressed in the outer frame of the chain, and keeps the others.
The motion is a planar map, so a geodetic value raises an error.
SELECT asText(rotateZ(tpose '[Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7), 6); /* [Pose(POINT(0.120625 1.40906),1)@2001-01-01, Pose(POINT(1.006091 3.462337),1.8)@2001-01-02] */