Devuelve los valores
getValues({tpose,tposechain}) → {poseset,posechainset}
SELECT asText(getValues(tpose '{[Pose(Point(1 1), 0.3)@2001-01-01,
Pose(Point(1 1), 0.5)@2001-01-02)}'));
-- {"Pose(POINT(1 1),0.3)","Pose(POINT(1 1),0.5)"}
SELECT asEWKT(getValues(tpose 'SRID=5676;
{[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.3)@2001-01-02)}'));
-- SRID=5676;{"Pose(POINT(1 1),0.3)"}
Devuelve los puntos
points(tpose) → geomset
SELECT asEWKT(points(tpose 'SRID=5676;
{Pose(Point(3 3), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-02}'));
-- SRID=5676;{POINT(1 1), POINT(3 3)}
Devuelve la trayectoria
trajectory(tpose) → geometry
Una pose tiene una posición y una orientación, pero no una extensión, por lo que la geometría que cubre a lo largo del tiempo es la trayectoria de su posición, como para un punto temporal. Una pose que interpola se desplaza por la línea entre dos posiciones consecutivas; una que no interpola permanece en cada una de ellas y no cubre nada entre ellas.
SELECT ST_AsText(trajectory(tpose '[Pose(Point(1 1),0.5)@2001-01-01, Pose(Point(3 3),0.5)@2001-01-02]')); -- LINESTRING(1 1,3 3) SELECT ST_AsText(trajectory(tpose 'Interp=Step; [Pose(Point(1 1),0.5)@2001-01-01, Pose(Point(3 3),0.5)@2001-01-02]')); -- MULTIPOINT((1 1),(3 3))
Devuelve el valor en una marca de tiempo
valueAtTimestamp(tpose,timestamptz) → pose
SELECT asText(valueAtTimestamp(tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(3 3), 0.5)@2001-01-03)', '2001-01-02')); -- Pose(POINT(2 2),0.4) SELECT asText(valueAtTimestamp(tpose '[Pose(Point Z(1 1 1), 0.5, 0.5, 0.5, 0.5)@2001-01-01, Pose(Point Z(3 3 3), 1, 0, 0, 0)@2001-01-03)', timestamptz '2001-01-02'), 6); -- Pose(POINT Z (2 2 2),0.866025,0.288675,0.288675,0.288675)
Devuelve la velocidad de una pose temporal como un flotante temporal: la magnitud de la velocidad de la componente de posición (distancia recorrida por unidad de tiempo)
speed(tpose) → tfloat
La orientación no es considerada; para la velocidad angular véase angularSpeed.
La respuesta se da en las unidades del CRS del SRID, que multiplicadas por 3600 en este caso corresponden a metros por hora.
SELECT asText(speed(tpose '[Pose(Point(0 0), 0)@2001-01-01 08:00, Pose(Point(1 1), 0.5)@2001-01-02 08:00]') * 3600); -- Interp=Step;[1.414213562373095@2001-01-01, 1.414213562373095@2001-01-02]
Devuelve la velocidad angular de una pose temporal como un flotante temporal con interpolación por pasos (radianes por unidad de tiempo)
angularSpeed(tpose) → tfloat
Para las poses 2D es el delta theta del arco más corto por segmento dividido por la duración del segmento; para las poses 3D es el ángulo de arco de SLERP 2 · acos(|q1 · q2|) dividido por la duración del segmento. SLERP tiene por construcción velocidad angular constante a lo largo de un segmento, por lo que el resultado es constante a trozos.
-- 90-degree yaw rotation over one day -> pi/2 rad / 86400 s SELECT asText(angularSpeed(tpose '[Pose(Point(0 0 0), 1, 0, 0, 0)@2001-01-01, Pose(Point(0 0 0), 0.7071067811865476, 0, 0, 0.7071067811865475)@2001-01-02]')); -- Interp=Step;[1.8181e-5@2001-01-01, 1.8181e-5@2001-01-02]
Devuelve el valor de un instante temporal, el conjunto de valores o el lapso de tiempo
getValue({tpose,tposechain}) → {pose,posechain}
timeSpan({tpose,tposechain}) → tstzspan
SELECT asEWKT(getValue(tposechain 'PoseChain(Pose(Point(1 1), 0.5))@2001-01-01'));
-- PoseChain(Pose(POINT(1 1),0.5))
SELECT asEWKT(getValues(tposechain '{PoseChain(Pose(Point(1 1), 0.5))@2001-01-01,
PoseChain(Pose(Point(2 2), 0.5))@2001-01-02}'));
-- {"PoseChain(Pose(POINT(1 1),0.5))", "PoseChain(Pose(POINT(2 2),0.5))"}
SELECT timeSpan(tposechain '[PoseChain(Pose(Point(1 1), 0.5))@2001-01-01,
PoseChain(Pose(Point(2 2), 0.5))@2001-01-02]');
-- [2001-01-01, 2001-01-02]