Se aplican las funciones estándar de modificación de secuencias: round, setInterp, shiftTime, scaleTime, shiftScaleTime, deleteTimestamp, etc.
Redondea todos los componentes numéricos a un número dado de posiciones decimales
round(trgeometry,integer) → trgeometry
SELECT asText(round( trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0)); Pose(Point(1.123456789 1.123456789), 0.123456)@2001-01-01', 3)); -- POLYGON((0 0,1 0,1 1,0 1,0 0));Pose(POINT(1.123 1.123),0.123)@...
Convierte entre interpolaciones lineal y escalonada
setInterp(trgeometry,text) → trgeometry
SELECT asText(setInterp(trgeometry 'Interp=Step;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]', 'linear'));
-- POLYGON((0 0,1 0,1 1,0 1,0 0));
-- {[Pose(POINT(0 0),0)@2001-01-01, Pose(POINT(0 0),0)@2001-01-02),
-- [Pose(POINT(10 0),0)@2001-01-02]}
Desplaza, escalar, o desplazar y escalar el dominio temporal de una trgeometry
shiftTime(trgeometry,interval) → trgeometry scaleTime(trgeometry,interval) → trgeometry shiftScaleTime(trgeometry,interval,interval) → trgeometry
SELECT asText(shiftTime(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]', interval '1 day')); -- POLYGON((0 0,1 0,1 1,0 1,0 0)); -- [Pose(POINT(0 0),0)@2001-01-02, Pose(POINT(10 0),0)@2001-01-03] SELECT asText(scaleTime(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]', interval '2 days')); -- POLYGON((0 0,1 0,1 1,0 1,0 0)); -- [Pose(POINT(0 0),0)@2001-01-01, Pose(POINT(10 0),0)@2001-01-03] SELECT asText(shiftScaleTime(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]', interval '1 day', interval '2 days')); -- POLYGON((0 0,1 0,1 1,0 1,0 0)); -- [Pose(POINT(0 0),0)@2001-01-02, Pose(POINT(10 0),0)@2001-01-04]
Transforma una trgeometry no lineal en un conjunto de filas, una por pose distinta, cada una es una pareja compuesta de la geometría de referencia con la pose aplicada y el conjunto de períodos durante el cual la trgeometry toma esa pose
unnest(trgeometry) → {(value,time)}
SELECT ST_AsText((un).value), (un).time
FROM (SELECT unnest(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));
{Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(4 0), 0.0)@2001-01-02,
Pose(Point(0 0), 0.0)@2001-01-03}') AS un) t;
-- POLYGON((0 0,1 0,1 1,0 1,0 0)) | {[2001-01-01, 2001-01-01], [2001-01-03, 2001-01-03]}
-- POLYGON((4 0,5 0,5 1,4 1,4 0)) | {[2001-01-02, 2001-01-02]}
SELECT ST_AsText(ST_SnapToGrid((un).value, 0.000001)), (un).time
FROM (SELECT unnest(merge(
trgeometry(geometry 'Polygon((0 0,1 0,1 1,0 1,0 0))',
pose(geometry 'Point(0 0)', 0), timestamptz '2001-01-01'),
trgeometry(geometry 'Polygon((0 0,1 0,1 1,0 1,0 0))',
pose(geometry 'Point(3 2)', pi() / 2), timestamptz '2001-01-02'))) AS un) t;
-- POLYGON((0 0,1 0,1 1,0 1,0 0)) | {[2001-01-01, 2001-01-01]}
-- POLYGON((3 2,3 3,2 3,2 2,3 2)) | {[2001-01-02, 2001-01-02]}
La pose se aplica a la geometría de referencia en cada fila del resultado: el valor de una fila es la geometría de referencia rotada según la orientación de la pose y luego trasladada a su posición, la geometría que startValue y valueAtTimestamp devuelven en esa pose. En el segundo ejemplo la pose rota el cuadrado 90° y lo desplaza a (3, 2). Una geometría de referencia que una rotación lleva sobre sí misma produce filas con geometrías iguales, una por pose.
Devuelve un valor temporal trasladado por los desplazamientos dados
translate(trgeometry,deltax float,deltay float,deltaz float=0) → trgeometry
Un desplazamiento vertical saca un valor bidimensional de su plano, por lo que el resultado es tridimensional.
El movimiento desplaza la pose de cada instante y conserva la geometría de referencia. Un movimiento que saca un valor bidimensional de su plano lleva consigo la geometría de referencia, en el plano z = 0.
El movimiento es una aplicación plana, por lo que un valor geodésico genera un error.
SELECT asText(translate(trgeometry 'Polygon((0 0,2 0,2 1,0 1,0 0)); [Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 1, 2), 6); /* POLYGON((0 0,2 0,2 1,0 1,0 0));[Pose(POINT(2 3),0.3)@2001-01-01, Pose(POINT(4 4),1.1)@2001-01-02] */
Devuelve un valor temporal rotado en sentido antihorario alrededor del origen o de un punto
rotate(trgeometry,angle float) → trgeometry rotate(trgeometry,angle float,x0 float,y0 float) → trgeometry
El movimiento desplaza la pose de cada instante y conserva la geometría de referencia. Un movimiento que saca un valor bidimensional de su plano lleva consigo la geometría de referencia, en el plano z = 0.
El movimiento es una aplicación plana, por lo que un valor geodésico genera un error.
SELECT asText(rotate(trgeometry 'Polygon((0 0,2 0,2 1,0 1,0 0)); [Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7, 1, 1), 6); /* POLYGON((0 0,2 0,2 1,0 1,0 0));[Pose(POINT(1 1),1)@2001-01-01, Pose(POINT(1.885467 3.053278),1.8)@2001-01-02] */
Devuelve un valor temporal rotado en sentido antihorario alrededor del eje x
rotateX(trgeometry,angle float) → trgeometry
La rotación saca un valor bidimensional de su plano, por lo que el resultado es tridimensional: cada posición gana la altura que le da la rotación y cada orientación es la rotación compuesta con el ángulo alrededor de la vertical que indica el valor.
El movimiento desplaza la pose de cada instante y conserva la geometría de referencia. Un movimiento que saca un valor bidimensional de su plano lleva consigo la geometría de referencia, en el plano z = 0.
El movimiento es una aplicación plana, por lo que un valor geodésico genera un error.
SELECT asText(rotateX(trgeometry 'Polygon((0 0,2 0,2 1,0 1,0 0)); [Pose(Point(1 1),0.3)@2001-01-01, Pose(Point(3 2),1.1)@2001-01-02]', 0.7), 6); /* POLYGON Z ((0 0 0,2 0 0,2 1 0,0 1 0,0 0 0)); [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] */
Devuelve un valor temporal rotado en sentido antihorario alrededor del eje y
rotateY(trgeometry,angle float) → trgeometry
La rotación saca un valor bidimensional de su plano, por lo que el resultado es tridimensional: cada posición gana la altura que le da la rotación y cada orientación es la rotación compuesta con el ángulo alrededor de la vertical que indica el valor.
El movimiento desplaza la pose de cada instante y conserva la geometría de referencia. Un movimiento que saca un valor bidimensional de su plano lleva consigo la geometría de referencia, en el plano z = 0.
El movimiento es una aplicación plana, por lo que un valor geodésico genera un error.
Devuelve un valor temporal rotado en sentido antihorario alrededor del eje z
rotateZ(trgeometry,angle float) → trgeometry
El movimiento desplaza la pose de cada instante y conserva la geometría de referencia. Un movimiento que saca un valor bidimensional de su plano lleva consigo la geometría de referencia, en el plano z = 0.
El movimiento es una aplicación plana, por lo que un valor geodésico genera un error.