El tipo tpcbox es la caja delimitadora espaciotemporal para los tipos de nube de puntos temporal. Refleja la estructura de stbox (véase Capítulo 3, Tipos de cuadro delimitador) — mismos ejes X/Y/Z/T, mismos bits de indicador para las dimensiones presentes — y añade un único campo: el pcid. Dos valores tpcbox con distintos valores de pcid nunca se consideran solapados, contenidos, iguales o adyacentes entre sí, independientemente de su extensión geométrica o temporal.
Propagar el pcid a través de la aritmética de cajas delimitadoras garantiza que la poda por caja delimitadora nunca descarte una fila cuyo esquema difiera del esquema de la consulta, y nunca devuelva un resultado entre esquemas incompatibles.
Construir un tpcbox a partir de límites X/Y/Z/T explícitos y un pcid
tpcbox(xmin,ymin,xmax,ymax,pcid,srid=0) → tpcbox
tpcbox_z(xmin,ymin,zmin,xmax,ymax,zmax,pcid,srid=0) → tpcbox
tpcbox_t(period,pcid) → tpcbox
tpcbox_xt(xmin,ymin,xmax,ymax,period,pcid,srid=0) → tpcbox
tpcbox_zt(xmin,ymin,zmin,xmax,ymax,zmax,period,pcid,srid=0) → tpcbox
SELECT tpcbox(0, 0, 10, 10, 1, 0); -- TPCBOX(X((0,0),(10,10)), 1) SELECT tpcbox_zt(0, 0, 0, 10, 10, 10, tstzspan '[2024-01-01, 2024-01-02]', 1, 0); -- TPCBOX(ZT(((0,0,0),(10,10,10)),[2024-01-01, 2024-01-02]), 1)
Convertir un pcpoint a un tpcbox degenerado (de extensión cero); el SRID y el pcid provienen del esquema
tpcbox(pcpoint) → tpcbox
SELECT tpcbox(PC_MakePoint(1, ARRAY[10.0, 20.0, 30.0])); -- TPCBOX(Z((10,20,30),(10,20,30)), 1)
Convertir un pcpatch a un tpcbox usando los límites PCBOUNDS 2D integrados en el parche; la segunda forma acepta un SRID explícito en lugar de buscarlo en el esquema
tpcbox(pcpatch) → tpcbox
tpcbox(pcpatch,integer) → tpcbox
SELECT tpcbox(PC_Patch(PC_MakePoint(1, ARRAY[10.0, 20.0, 30.0])));
Devuelve si un tpcbox tiene establecidas las dimensiones X/Y, Z o T
hasX(tpcbox) → boolean
hasZ(tpcbox) → boolean
hasT(tpcbox) → boolean
WITH b AS (SELECT tpcbox(0, 0, 10, 10, 1, 0) AS b) SELECT hasX(b), hasZ(b) FROM b; -- t | f
Devuelve un límite de coordenada, NULL si la dimensión correspondiente está ausente
xmin(tpcbox) → float
xmax(tpcbox) → float
ymin(tpcbox) → float
ymax(tpcbox) → float
zmin(tpcbox) → float
zmax(tpcbox) → float
WITH b AS (SELECT tpcbox(0, 0, 10, 10, 1, 0) AS b) SELECT xmin(b), xmax(b) FROM b; -- 0 | 10
Devuelve un límite temporal, NULL si la caja no tiene dimensión T
tmin(tpcbox) → timestamptz
tmax(tpcbox) → timestamptz
SELECT tmin(tpcbox_t(tstzspan '[2024-01-01, 2024-01-02]', 1)); -- 2024-01-01 00:00:00+00
Devuelve el identificador de esquema y el SRID
pcid(tpcbox) → integer
SRID(tpcbox) → integer
WITH b AS (SELECT tpcbox(0, 0, 10, 10, 7, 4326) AS b) SELECT pcid(b), SRID(b) FROM b; -- 7 | 4326
Devuelve un tpcbox con las coordenadas redondeadas al número de dígitos decimales indicado
round(tpcbox,integer=0) → tpcbox
SELECT round(tpcbox(0.123456, 1.234567, 2.345678, 3.456789, 1, 0), 2); -- TPCBOX(X((0.12,1.23),(2.35,3.46)), 1)
Devuelve un tpcbox con el SRID sobreescrito. No reproyecta las coordenadas — para ello, proyecte primero el tpcpoint subyacente y tome la caja delimitadora del resultado
setSRID(tpcbox,integer) → tpcbox
SELECT SRID(setSRID(tpcbox(0, 0, 10, 10, 1, 0), 4326)); -- 4326
Devuelve la unión de dos tpcboxes; ambas deben compartir el mismo pcid
tpcbox_union(tpcbox,tpcbox) → tpcbox
tpcbox + tpcbox → tpcbox
SELECT tpcbox(0, 0, 5, 5, 1, 0) + tpcbox(3, 3, 10, 10, 1, 0); -- TPCBOX(X((0,0),(10,10)), 1)
Devuelve la intersección de dos tpcboxes, NULL si son disjuntas o el pcid no coincide
tpcbox_intersection(tpcbox,tpcbox) → tpcbox
tpcbox * tpcbox → tpcbox
SELECT tpcbox(0, 0, 5, 5, 1, 0) * tpcbox(3, 3, 10, 10, 1, 0); -- TPCBOX(X((3,3),(5,5)), 1)
Nota: no se proporciona un minus genérico entre cajas, siguiendo la convención de stbox y tbox: la diferencia de dos cajas no es en general una caja.
Todos los operadores topológicos toman dos valores tpcbox con pcid coincidente. Una discrepancia de pcid siempre devuelve false (no un error) para que los escaneos de índice se comporten de forma intuitiva.
Devuelve true si el primer tpcbox contiene al segundo
tpcbox @> tpcbox → boolean
SELECT tpcbox(0, 0, 10, 10, 1, 0) @> tpcbox(2, 2, 8, 8, 1, 0); -- t
Devuelve true si el primer tpcbox está contenido en el segundo
tpcbox <@ tpcbox → boolean
SELECT tpcbox(2, 2, 8, 8, 1, 0) <@ tpcbox(0, 0, 10, 10, 1, 0); -- t
Devuelve true si dos tpcboxes se solapan
tpcbox && tpcbox → boolean
SELECT tpcbox(0, 0, 5, 5, 1, 0) && tpcbox(3, 3, 10, 10, 1, 0); -- t SELECT tpcbox(0, 0, 5, 5, 1, 0) && tpcbox(0, 0, 5, 5, 2, 0); -- f (pcid mismatch)
Devuelve true si dos tpcboxes son exactamente iguales
tpcbox ~= tpcbox → boolean
Devuelve true si dos tpcboxes son adyacentes (comparten un límite)
tpcbox -|- tpcbox → boolean
Dieciséis predicados de posición alineados por eje, paralelos a los de stbox. Cada uno comprueba la relación estricta o de solapamiento a lo largo de un eje. Todos requieren pcid coincidente; la discrepancia devuelve false. Los predicados del eje Z requieren que ambas cajas tengan dimensión Z; los del eje T requieren que ambas tengan dimensión T.
Comprueba el orden en el eje X de dos tpcboxes
tpcbox << tpcbox → boolean (estrictamente a la izquierda)
tpcbox &< tpcbox → boolean (no se extiende a la derecha)
tpcbox >> tpcbox → boolean (estrictamente a la derecha)
tpcbox &> tpcbox → boolean (no se extiende a la izquierda)
Comprueba el orden en el eje Y de dos tpcboxes
tpcbox <<| tpcbox → boolean (estrictamente por debajo)
tpcbox &<| tpcbox → boolean (no se extiende hacia arriba)
tpcbox |>> tpcbox → boolean (estrictamente por encima)
tpcbox |&> tpcbox → boolean (no se extiende hacia abajo)
Comprueba el orden en el eje Z de dos tpcboxes (devuelve false si alguna carece de Z)
tpcbox <</ tpcbox → boolean (estrictamente al frente)
tpcbox &</ tpcbox → boolean (no se extiende hacia atrás)
tpcbox />> tpcbox → boolean (estrictamente detrás)
tpcbox /&> tpcbox → boolean (no se extiende hacia el frente)
Comprueba el orden en el eje temporal de dos tpcboxes (devuelve false si alguna carece de T)
tpcbox <<# tpcbox → boolean (estrictamente antes)
tpcbox &<# tpcbox → boolean (no se extiende después)
tpcbox #>> tpcbox → boolean (estrictamente después)
tpcbox #&> tpcbox → boolean (no se extiende antes)
Compara dos tpcboxes; orden total sobre la codificación canónica (pcid, srid, flags, período y a continuación límites espaciales en orden XYZ-min/max)
tpcbox = tpcbox → boolean
tpcbox <> tpcbox → boolean
tpcbox < tpcbox → boolean
tpcbox <= tpcbox → boolean
tpcbox > tpcbox → boolean
tpcbox >= tpcbox → boolean