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.
Restringir 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.
Restringir 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.
Restringir 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]}