Devuelve la trayectoria o el área atravesada
trajectory(tpoint,unary_union boolean=false) → geo traversedArea(tgeo,unary_union boolean=false) → geo
Esta función es equivalente a getValues para los valores temporales alphanuméricos. El último argumento indica si se aplica la función PostGIS ST_UnaryUnion para eliminar geometrías redundantes en el resultado. Tenga en cuenta que establecer este argumento como verdadero implica un alto consumo computacional.
SELECT ST_AsText(trajectory(tgeompoint '[Point(0 0)@2001-01-01, Point(0 1)@2001-01-02,
Point(0 0)@2001-01-03]'));
-- LINESTRING(0 0,0 1,0 0)
SELECT ST_AsText(trajectory(tgeompoint '[Point(0 0)@2001-01-01, Point(0 1)@2001-01-02,
Point(0 0)@2001-01-03]', true));
-- LINESTRING(0 0,0 1)
SELECT ST_AsText(trajectory(tgeompoint '{[Point(0 0)@2001-01-01, Point(0 1)@2001-01-02),
[Point(0 1)@2001-01-03, Point(0 0)@2001-01-04)}'));
-- LINESTRING(0 0,0 1)
SELECT ST_AsText(trajectory(tgeompoint 'Interp=Step;{[Point(0 0)@2001-01-01,
Point(0 1)@2001-01-02], [Point(0 1)@2001-01-03, Point(1 1)@2001-01-04]}'));
-- MULTIPOINT((0 0),(1 1),(0 1))
SELECT ST_AsText(traversedArea(tgeometry '[Point(1 1)@2001-01-01, Linestring(1 1,2 2)@2001-01-02, Point(1 1)@2001-01-03]')); -- GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(1 1,2 2)) SELECT ST_AsText(traversedArea(tgeometry '[Point(1 1)@2001-01-01, Linestring(1 1,2 2)@2001-01-02, Point(1 1)@2001-01-03]', true)); -- LINESTRING(1 1,2 2)
Devuelve el centroide como un punto temporal
centroid(tgeo) → tpoint centroid(tgeography,spheroid boolean=true) → tgeogpoint
Para geografías, el cálculo se realiza en el esferoide WGS 84 por defecto. Si el último argumento es falso, se utiliza un cálculo esférico más rápido.
SELECT asText(centroid(tgeometry '[Point(1 1)@2001-01-01, Linestring(1 1,3 3)@2001-01-02,
Polygon((1 1,4 4,7 1,1 1))@2001-01-03]'));
-- Interp=Step;[POINT(1 1)@2001-01-01, POINT(2 2)@2001-01-02, POINT(4 2)@2001-01-03]
SELECT asText(centroid(tgeography '[MultiPoint(1 1,4 4,7 1)@2001-01-01,
Polygon((1 1,4 4,7 1,1 1))@2001-01-02]'),6);
-- Interp=Step;[POINT(4 2.001727)@2001-01-01, POINT(4 2.001727)@2001-01-02]
SELECT asText(centroid(tgeography '{Linestring(0 0,0 1,1 1)@2001-01-01}', false), 6);
-- {POINT(0.249967 0.750007)@2001-01-01}
Devuelve los valores de las coordenadas X/Y/Z como un número flotante temporal
getX(tpoint) → tfloat getY(tpoint) → tfloat getZ(tpoint) → tfloat
SELECT getX(tgeompoint '{Point(1 2)@2001-01-01, Point(3 4)@2001-01-02,
Point(5 6)@2001-01-03}');
-- {1@2001-01-01, 3@2001-01-02, 5@2001-01-03}
SELECT getX(tgeogpoint 'Interp=Step;
[Point(1 2 3)@2001-01-01, Point(4 5 6)@2001-01-02, Point(7 8 9)@2001-01-03]');
-- Interp=Step;[1@2001-01-01, 4@2001-01-02, 7@2001-01-03]
SELECT getY(tgeompoint '{Point(1 2)@2001-01-01, Point(3 4)@2001-01-02,
Point(5 6)@2001-01-03}');
-- {2@2001-01-01, 4@2001-01-02, 6@2001-01-03}
SELECT getY(tgeogpoint 'Interp=Step;
[Point(1 2 3)@2001-01-01, Point(4 5 6)@2001-01-02, Point(7 8 9)@2001-01-03]');
-- Interp=Step;[2@2001-01-01, 5@2001-01-02, 8@2001-01-03]
SELECT getZ(tgeompoint '{Point(1 2)@2001-01-01, Point(3 4)@2001-01-02,
Point(5 6)@2001-01-03}');
-- The temporal point must have Z dimension
SELECT getZ(tgeogpoint 'Interp=Step;
[Point(1 2 3)@2001-01-01, Point(4 5 6)@2001-01-02, Point(7 8 9)@2001-01-03]');
-- Interp=Step;[3@2001-01-01, 6@2001-01-02, 9@2001-01-03]
Devuelve verdadero si el punto temporal no se auto-intersecta espacialmente
isSimple(tpoint) → boolean
Nótese que un punto temporal de conjunto de secuencias es simple si cada una de las secuencias que lo componen es simple.
SELECT isSimple(tgeompoint '[Point(0 0)@2001-01-01, Point(1 1)@2001-01-02,
Point(0 0)@2001-01-03]');
-- false
SELECT isSimple(tgeompoint '[Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02,
Point(2 0 2)@2001-01-03, Point(0 0 0)@2001-01-04]');
-- false
SELECT isSimple(tgeompoint '{[Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02],
[Point(1 1 1)@2001-01-03, Point(0 0 0)@2001-01-04]}');
-- true
Devuelve la longitud atravesada por el punto temporal
length(tpoint) → float
length(geo) → float
length({geography,tgeogpoint},spheroid boolean=true) → float
La función length devuelve la longitud de una geometría o de una geografía, la de una geografía en metros sobre el esferoide, como la función ST_Length de PostGIS. Si el último argumento es falso, se utiliza un cálculo esférico más rápido.
SELECT length(tgeompoint '[Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02]'); -- 1.73205080756888 SELECT length(tgeompoint '[Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02, Point(0 0 0)@2001-01-03]'); -- 3.46410161513775 SELECT length(tgeompoint 'Interp=Step; [Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02, Point(0 0 0)@2001-01-03]'); -- 0 SELECT length(geometry 'Linestring(0 0,3 4)'); -- 5 SELECT round(length(geography 'Linestring(4.35 50.85,4.40 50.85)'), 6); -- 3521.188745 SELECT round(length(tgeogpoint '[Point(0 1)@2001-01-01, Point(0 2)@2001-01-02]', false), 3); -- 111195.08
Devuelve la longitud acumulada atravesada por el punto temporal
cumulativeLength(tpoint) → tfloatSeq cumulativeLength(tgeogpoint,spheroid boolean=true) → tfloatSeq
Para geografías, el cálculo se realiza en el esferoide WGS 84 por defecto. Si el último argumento es falso, se utiliza un cálculo esférico más rápido.
SELECT round(cumulativeLength(tgeompoint '{[Point(0 0)@2001-01-01, Point(1 1)@2001-01-02,
Point(1 0)@2001-01-03], [Point(1 0)@2001-01-04, Point(0 0)@2001-01-05]}'), 6);
-- {[0@2001-01-01, 1.414214@2001-01-02, 2.414214@2001-01-03],
[2.414214@2001-01-04, 3.414214@2001-01-05]}
SELECT cumulativeLength(tgeompoint 'Interp=Step;
[Point(0 0 0)@2001-01-01, Point(1 1 1)@2001-01-02, Point(0 0 0)@2001-01-03]');
-- Interp=Step;[0@2001-01-01, 0@2001-01-03]
SELECT round(cumulativeLength(tgeogpoint '[Point(0 1)@2001-01-01, Point(0 2)@2001-01-02]',
false), 3);
-- [0@2001-01-01, 111195.08@2001-01-02]
Devuelve la velocidad del punto temporal en unidades por segundo
speed(tpoint) → tfloatSeqSet speed(tgeogpoint,spheroid boolean=true) → tfloatSeqSet
El punto temporal debe tener interpolación linear. Para geografías, el cálculo se realiza en el esferoide WGS 84 por defecto. Si el último argumento es falso, se utiliza un cálculo esférico más rápido.
SELECT speed(tgeompoint '{[Point(0 0)@2001-01-01, Point(1 1)@2001-01-02,
Point(1 0)@2001-01-03], [Point(1 0)@2001-01-04, Point(0 0)@2001-01-05]}') * 3600 * 24;
/* Interp=Step;{[1.4142135623731@2001-01-01, 1@2001-01-02, 1@2001-01-03],
[1@2001-01-04, 1@2001-01-05]} */
SELECT speed(tgeompoint 'Interp=Step;
[Point(0 0)@2001-01-01, Point(1 1)@2001-01-02, Point(1 0)@2001-01-03]');
-- ERROR: The temporal value must have linear interpolation
SELECT round(speed(tgeogpoint '[Point(0 1)@2001-01-01, Point(0 2)@2001-01-02]',
false), 6);
-- Interp=Step;[1.28698@2001-01-01, 1.28698@2001-01-02]
Devuelve el centroide ponderado en el tiempo
twCentroid(tgeompoint) → point
SELECT ST_AsText(twCentroid(tgeompoint '{[Point(0 0 0)@2001-01-01,
Point(0 1 1)@2001-01-02, Point(0 1 1)@2001-01-03, Point(0 0 0)@2001-01-04)}'));
-- POINT Z (0 0.666666666666667 0.666666666666667)
Devuelve la dirección, es decir, el acimut entre las ubicaciones inicial y final
direction(tpoint) → float
El resultado se expresa en radianes. Es NULL si solo hay una ubicación o si las ubicaciones inicial y final son iguales.
SELECT round(degrees(direction(tgeompoint '[Point(0 0)@2001-01-01,
Point(-1 -1)@2001-01-02, Point(1 1)@2001-01-03]'))::numeric, 6);
-- 45.000000
SELECT direction(tgeompoint '{[Point(0 0 0)@2001-01-01, Point(0 1 1)@2001-01-02,
Point(0 1 1)@2001-01-03, Point(0 0 0)@2001-01-04)}');
-- NULL
Devuelve el acimut temporal
azimuth(tpoint) → tfloat
El resultado se expresa en radianes. El azimut es indefinido cuando dos localizaciones sucesivas son iguales y en este caso se añade una brecha de tempo.
SELECT round(degrees(azimuth(tgeompoint '[Point(0 0 0)@2001-01-01,
Point(1 1 1)@2001-01-02, Point(1 1 1)@2001-01-03, Point(0 0 0)@2001-01-04)')));
-- Interp=Step;{[45@2001-01-01, 45@2001-01-02], [225@2001-01-03, 225@2001-01-04)}
Devuelve la diferencia angular temporal
angularDifference(tpoint) → tfloat
El resultado se expresa en grados.
SELECT round(angularDifference(tgeompoint '[Point(1 1)@2001-01-01, Point(2 2)@2001-01-02,
Point(1 1)@2001-01-03]'), 3);
-- {0@2001-01-01, 180@2001-01-02, 0@2001-01-03}
SELECT round(degrees(angularDifference(tgeompoint '{[Point(1 1)@2001-01-01,
Point(2 2)@2001-01-02], [Point(2 2)@2001-01-03, Point(1 1)@2001-01-04]}')), 3);
-- {0@2001-01-01, 0@2001-01-02, 0@2001-01-03, 0@2001-01-04}
Devuelve el rumbo temporal
bearing({tpoint,point},{tpoint,point}) → tfloat
Nótese que esta función no acepta dos puntos geográficos temporales.
SELECT degrees(bearing(tgeompoint '[Point(1 1)@2001-01-01, Point(3 3)@2001-01-03]', geometry 'Point(2 2)')); -- [45@2001-01-01, 0@2001-01-02, 225@2001-01-03] SELECT round(degrees(bearing(tgeompoint '[Point(0 0)@2001-01-01, Point(2 0)@2001-01-03]', tgeompoint '[Point(2 1)@2001-01-01, Point(0 1)@2001-01-03]')), 3); -- [63.435@2001-01-01, 0@2001-01-02, 296.565@2001-01-03] SELECT round(degrees(bearing(tgeompoint '[Point(2 1)@2001-01-01, Point(0 1)@2001-01-03]', tgeompoint '[Point(0 0)@2001-01-01, Point(2 0)@2001-01-03]')), 3); -- [243.435@2001-01-01, 116.565@2001-01-03]