Operaciones de cuadro delimitador

Operaciones topológicas

Hay cinco operadores topológicos: superposición (&&), contiene (@>), es contenido (<@), mismo (~=) y adyacente (-|-). Los operadores verifican la relación topológica entre los cuadros delimitadores teniendo en cuenta la dimensión de valor y/o de tiempo para todas las dimensiónes que estén presentes en ambos argumentos.

  • ¿Se superponen los cuadros delimitadores?

    box && box → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,3),[2001-01-01,2001-01-03])' &&
      tbox 'TBOXFLOAT XT((2,4),[2001-01-02,2001-01-04])';
    -- true
    SELECT stbox 'STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02])' &&
      stbox 'STBOX XT([2001-01-02,2001-01-02])';
    -- true
    
  • ¿Contiene el primer cuadro delimitador el segundo?

    box @> box → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,4),[2001-01-01,2001-01-04])' @>
      tbox 'TBOXFLOAT XT((2,3),[2001-01-01,2001-01-02])';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(3,3,3))' @>
      stbox 'STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02])';
    -- true
    
  • ¿Está el primer cuadro delimitador contenido en el segundo?

    box <@ box → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' <@
      tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])';
    -- true
    SELECT stbox 'STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02)' <@
      stbox 'STBOX ZT(((1,1,1),(2,2,2)),[2001-01-01,2001-01-02])';
    -- true
    
  • ¿Son los cuadros delimitadores iguales en sus dimensiónes comunes?

    box ~= box → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' ~=
      tbox 'TBOXFLOAT XT([2001-01-01,2001-01-02])';
    -- true
    SELECT stbox 'STBOX XT(((1,1),(3,3)),[2001-01-01,2001-01-03])' ~=
      stbox 'STBOX Z((1,1,1),(3,3,3))';
    -- true
    
  • ¿Son los cuadros delimitadores adyacentes?

    box -|- box → boolean
    

    Dos cuadros delimitadores son adyacentes si sus extensiones se encuentran en todas las dimensiones que los cuadros comparten y se tocan en un solo valor en al menos una de ellas. Una dimensión en la que los cuadros están separados los separa sea cual sea el comportamiento de las demás dimensiones.

    SELECT tbox 'TBOXINT XT([1,2),[2001-01-01,2001-01-02])' -|-
      tbox 'TBOXINT XT([2,3),[2001-01-02,2001-01-03])';
    -- true
    SELECT tbox 'TBOXFLOAT XT((1,2)[2001-01-01,2001-01-02])' -|-
      tbox 'TBOX T([2001-01-02,2001-01-03])';
    -- true
    SELECT stbox 'STBOX XT(((1,1),(3,3)),[2001-01-01,2001-01-03])' -|-
      stbox 'STBOX XT(((2,2),(4,4)),[2001-01-03,2001-01-04])';
    -- true
    

Operaciones de posición

Los operadores de posición consideran la posición relativa de los cuadros delimitadores. Los operadores <<, >>, &< y &> consideran el valor X para el tipo tbox y las coordenadas X para el tipo stbox, los operadores <<|, |>>, &<| y |&> consideran las coordenadas Y para el tipo stbox, los operadores <</, />>, &</ y /&> consideran las coordenadas Z para el tipo stbox y los operadores <<#, #>>, #&< y #&> consideran la dimensión de tiempo para los tipos tbox y stbox. Los operadores generan un error si ambos cuadros delimitadores no tienen la dimensión requerida.

Los operadores para la dimensión numérica del tipo tbox se dan a continuación.

  • ¿Son los valores X/Y/Z/T del primer cuadro delimitador estrictamente menores que los del segundo?

    tbox {<<, <<#} tbox → boolean
    stbox {<<, <<|, <</, <<#} stbox → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' <<
      tbox 'TBOXFLOAT XT((3,4),[2001-01-03,2001-01-04])';
    -- true
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' <<
      tbox 'TBOXFLOAT XT([2001-01-03,2001-01-04])';
    -- ERROR:  The box must have value dimension
    SELECT stbox 'STBOX Z((1,1,1),(2,2,2))' << stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(2,2,2))' <<| stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(2,2,2))' <</ stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' <<#
      tbox 'TBOXFLOAT XT((3,4),[2001-01-03,2001-01-04])';
    -- true
    
  • ¿Son los valores X/Y/Z/T del primer cuadro delimitador estrictamente mayores que los del segundo?

    tbox {>>, #>>} tbox → boolean
    stbox {>>, |>>, />>, #>>} stbox → boolean
    
    SELECT tbox 'TBOXFLOAT XT((3,4),[2001-01-03,2001-01-04])' >>
      tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])';
    -- true
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' >> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- true
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' |>> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- true
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' />> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- true
    SELECT stbox 'STBOX XT((4,4),[2001-01-03,2001-01-04],((3,3)))'  #>>
      stbox 'STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02])';
    -- true
    
  • ¿No son los valores X/Y/Z/T del primer cuadro delimitador mayores que los del segundo?

    tbox {&<, &<#} {tbox,stbox} → boolean
    stbox &<, &<|, &</, &<#} stbox → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,4),[2001-01-01,2001-01-04])' &<
      tbox 'TBOXFLOAT XT((3,4),[2001-01-03,2001-01-04])';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(4,4,4))' &< stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(4,4,4))' &<| stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT stbox 'STBOX Z((1,1,1),(4,4,4))' &</ stbox 'STBOX Z((3,3,3),(4,4,4))';
    -- true
    SELECT tbox 'TBOXFLOAT XT((1,4),[2001-01-01,2001-01-04])' &<#
      tbox 'TBOXFLOAT XT((3,4),[2001-01-03,2001-01-04])';
    -- true
    
  • ¿No son los valores X/Y/Z/T del primer cuadro delimitador menores que los del segundo?

    tbox {&>, #&>} tbox → boolean
    stbox {&>, |&>, /&>, #&>} stbox} → boolean
    
    SELECT tbox 'TBOXFLOAT XT((1,2),[2001-01-01,2001-01-02])' &>
      tbox 'TBOXFLOAT XT((1,4),[2001-01-01,2001-01-04])';
    -- true
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' &> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- true
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' |&> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- false
    SELECT stbox 'STBOX Z((3,3,3),(4,4,4))' /&> stbox 'STBOX Z((1,1,1),(2,2,2))';
    -- true
    SELECT stbox 'STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02])' #&>
      stbox 'STBOX XT(((1,1),(4,4)),[2001-01-01,2001-01-04])';
    -- true