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 comparten n dimensiónes y si su intersección tiene como máximo n-1 dimensiónes.

    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?

    box << box → boolean

    stbox <<| stbox → boolean

    stbox <</ stbox → boolean

    box <<# box → 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?

    box >> box → boolean

    stbox |>> stbox → boolean

    stbox />> stbox → boolean

    box #>> box → 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?

    box &< box → boolean

    stbox &<| stbox → boolean

    stbox &</ stbox → boolean

    box &<# box → 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?

    box &> box → boolean

    stbox |&> stbox → boolean

    stbox /&> stbox → boolean

    box #&> box → 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