Las relaciones topológicas y de distancia descritas en la “Relaciones espaciales” tales como eIntersects, aDwithin o tContains solo consideran la ubicación de un valor, no su orientación. Una pose temporal las acepta directamente y las responde en la posición que ocupa su pose, que es el punto que nombra el destino de conversión tgeompoint. Las funciones geometry y tgeompoint y los castings explícitos :: correspondientes siguen disponibles cuando lo que se quiere es la geometría misma.
Las relaciones alguna vez y siempre determinan si la relación topológica o de distancia se satisface alguna vez o siempre y dan como resultado un boolean. Una pose temporal las responde en la posición que ocupa, de modo que un valor con interpolación lineal se responde a lo largo de su trayectoria y no solo en sus instantes. La pose temporal declara las relaciones que responde un punto en movimiento: eContains, aContains, eCovers y aCovers toman la geometría en primer lugar únicamente, y eTouches y aTouches no tienen dirección entre dos poses temporales, ya que un punto en movimiento no contiene ni cubre una geometría y dos puntos en movimiento no se tocan.
eContains(geometry,tpose) → boolean
eCovers(geometry,tpose) → boolean
eDisjoint({geometry,tpose},{geometry,tpose}) → boolean
eDwithin({geometry,tpose},{geometry,tpose},float) → boolean
eIntersects({geometry,tpose},{geometry,tpose}) → boolean
eTouches(geometry,tpose) → boolean
eTouches(tpose,geometry) → boolean
aContains(geometry,tpose) → boolean
aCovers(geometry,tpose) → boolean
aDisjoint({geometry,tpose},{geometry,tpose}) → boolean
aDwithin({geometry,tpose},{geometry,tpose},float) → boolean
aIntersects({geometry,tpose},{geometry,tpose}) → boolean
aTouches(geometry,tpose) → boolean
aTouches(tpose,geometry) → boolean
SELECT eContains(geometry 'Polygon((0 0,0 50,50 50,50 0,0 0))', tpose '[Pose(Point(1 1),0.1)@2001-01-01, Pose(Point(3 3),0.3)@2001-01-03]'); -- true SELECT aCovers(geometry 'Polygon((0 0,0 50,50 50,50 0,0 0))', tpose '[Pose(Point(1 1),0.1)@2001-01-01, Pose(Point(3 3),0.3)@2001-01-03]'); -- true SELECT eDisjoint(geometry(pose 'Pose(Point(2 2), 0.0)'), tpose '[Pose(Point(1 1),0.1)@2001-01-01, Pose(Point(1 1),0.3)@2001-01-03)'); -- true SELECT eIntersects(tpose '[Pose(Point(1 1),0.1)@2001-01-01, Pose(Point(3 3),0.1)@2001-01-03]', tpose '[Pose(Point(3 3),0.1)@2001-01-01, Pose(Point(1 1),0.1)@2001-01-03]'); -- true SELECT eTouches(tpose 'Pose(Point(0 0), 0.1)@2001-01-01', geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))'); -- true SELECT aDwithin(tpose '[Pose(Point(1 1),0.1)@2001-01-01, Pose(Point(3 3),0.1)@2001-01-03]', geometry 'Point(9 9)', 1.0); -- false
Las relaciones temporales calculan la relación topológica o de distancia en cada instante y dan como resultado un tbool. Una pose temporal las responde en la posición que ocupa, de modo que un valor con interpolación lineal se responde a lo largo de su trayectoria y no solo en sus instantes. La pose temporal declara las relaciones que responde un punto en movimiento: tContains y tCovers toman la geometría en primer lugar únicamente, y tTouches no tiene dirección entre dos poses temporales, ya que un punto en movimiento no contiene ni cubre una geometría y dos puntos en movimiento no se tocan.
tContains(geometry,tpose) → tbool
tCovers(geometry,tpose) → tbool
tDisjoint({geometry,tpose},{geometry,tpose}) → tbool
tDwithin({geometry,tpose},{geometry,tpose},float) → tbool
tIntersects({geometry,tpose},{geometry,tpose}) → tbool
tTouches(geometry,tpose) → tbool
tTouches(tpose,geometry) → tbool
SELECT tIntersects(tpose '[Pose(Point(1 1), 0.1)@2001-01-01,
Pose(Point(3 3), 0.1)@2001-01-03]', geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))');
-- {[t@2001-01-01, t@2001-01-02], (f@2001-01-02, f@2001-01-03]}
SELECT tDisjoint(tpose '[Pose(Point(1 1), 0.1)@2001-01-01,
Pose(Point(3 3), 0.1)@2001-01-03]', geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))');
-- {[f@2001-01-01, f@2001-01-02], (t@2001-01-02, t@2001-01-03]}
SELECT tContains(geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))',
tpose 'Pose(Point(0 0), 0.1)@2001-01-01');
-- f@2001-01-01
SELECT tCovers(geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))',
tpose 'Pose(Point(0 0), 0.1)@2001-01-01');
-- t@2001-01-01
SELECT tTouches(tpose 'Pose(Point(0 0), 0.1)@2001-01-01',
geometry 'Polygon((0 0,0 2,2 2,2 0,0 0))');
-- t@2001-01-01
SELECT tDwithin(tpose '[Pose(Point(1 1),0.3)@2001-01-01,
Pose(Point(1 1),0.5)@2001-01-03)', tpose '[Pose(Point(1 1),0.5)@2001-01-01,
Pose(Point(3 3),0.3)@2001-01-03)', 1);
/* {[t@2001-01-01, t@2001-01-01 16:58:14.025894],
(f@2001-01-01 16:58:14.025894, f@2001-01-03)} */