Las funciones atGeometry, minusGeometry, atStbox y minusStbox restringen una trgeometry a (el complemento de) una geometría o una caja espaciotemporal. La semántica refleja la de tpose: una geometría rígida temporal está «en» una región en el instante t si y solo si su centroide (antena) en t se encuentra en esa región.
Restringe al (complemento de) una pose o un conjunto de poses
atValue(trgeometry,pose) → trgeometry minusValue(trgeometry,pose) → trgeometry atValues(trgeometry,poseset) → trgeometry minusValues(trgeometry,poseset) → trgeometry
SELECT asText(atValue(trgeometry 'Polygon((1 1,2 2,3 1,1 1));
[Pose(Point(1 1), 0.2)@2001-01-01, Pose(Point(1 1), 0.4)@2001-01-02,
Pose(Point(1 1), 0.5)@2001-01-03]', pose 'Pose(Point(1 1), 0.5)'));
-- POLYGON((1 1,2 2,3 1,1 1));{[Pose(POINT(1 1),0.5)@2001-01-03]}
SELECT asText(minusValue(trgeometry 'Polygon((1 1,2 2,3 1,1 1));
{Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-02,
Pose(Point(1 1), 0.5)@2001-01-03}', pose 'Pose(Point(1 1), 0.5)'));
-- POLYGON((1 1,2 2,3 1,1 1));{Pose(POINT(1 1),0.3)@2001-01-01}
El valor de restricción es una pose, el valor base que interpola una geometría rígida temporal. La geometría de referencia se conserva sin cambios, de modo que el resultado describe el mismo cuerpo.
Restringe una trgeometry a (el complemento de) una geometría
atGeometry(trgeometry,geometry) → trgeometry minusGeometry(trgeometry,geometry) → trgeometry
SELECT temporalTime(atGeometry( 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-05]',
geometry 'Polygon((1 -1,3 -1,3 1,1 1,1 -1))'));
-- {[2001-01-02, 2001-01-04]}
SELECT temporalTime(minusGeometry( 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-05]',
geometry 'Polygon((1 -1,3 -1,3 1,1 1,1 -1))'));
-- {[2001-01-01, 2001-01-02), (2001-01-04, 2001-01-05]}
La restricción contra una geometría vacía devuelve NULL para atGeometry y la entrada original para minusGeometry.
Restringe una trgeometry a (el complemento de) una caja espaciotemporal
atStbox(trgeometry,stbox[,border_inc boolean=true]) → trgeometry minusStbox(trgeometry,stbox[,border_inc boolean=true]) → trgeometry
SELECT temporalTime(atStbox( 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-05]',
stbox 'STBOX X((1, -1), (3, 1))'));
-- {[2001-01-02, 2001-01-04]}
SELECT temporalTime(atStbox( 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-05]',
stbox 'STBOX T([2001-01-02, 2001-01-04])'));
-- {[2001-01-02, 2001-01-04]}
Si la STBox solo tiene un componente temporal, la llamada se reduce a atTime estándar; si solo tiene un componente espacial, se conserva el dominio temporal.
Restringe una trgeometry al (complemento de) un span de elevación
atElevation(trgeometry,floatspan) → trgeometry minusElevation(trgeometry,floatspan) → trgeometry
La elevación es la de la posición de la pose, no la del cuerpo: un cuerpo se extiende por encima y por debajo de su posición, y el span se evalúa únicamente sobre la posición. La geometría de referencia se conserva en el resultado. La geometría rígida temporal debe tener dimensión Z.
SELECT asText(atElevation(trgeometry 'Polygon Z((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0));
[Pose(Point(0 0 0),1,0,0,0)@2001-01-01, Pose(Point(0 0 4),1,0,0,0)@2001-01-05]',
floatspan '[1, 2]'));
/* POLYGON Z ((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0)); {[Pose(POINT Z
(0 0 1),1,0,0,0)@2001-01-02,
Pose(POINT Z (0 0 2),1,0,0,0)@2001-01-03]} */
SELECT getTime(minusElevation(trgeometry 'Polygon Z((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0));
[Pose(Point(0 0 0),1,0,0,0)@2001-01-01, Pose(Point(0 0 4),1,0,0,0)@2001-01-05]',
floatspan '[1, 2]'));
-- {[2001-01-01, 2001-01-02), (2001-01-03, 2001-01-05]}