Capítulo 3. Tipos de cuadro delimitador

Tabla de contenidos

Entrada y salida
Constructores
Conversiones de tipo
Accesores
Transformaciones
Sistema de referencia espacial
Funciones de división
Operaciones de conjuntos
Operaciones de cuadro delimitador
Operaciones topológicas
Operaciones de posición
Comparaciones
Aggregaciones
Indexación

A continuación presentamos las funciones y operadores para tipos cuadro delimitador. Estas funciones y operadores son polimórficos, es decir, sus argumentos pueden ser de varios tipos y el tipo del resultado puede depender del tipo de los argumentos. Para expresar esto, usamos la siguiente notación:

Entrada y salida

MobilityDB generaliza los formatos de entrada y salida Well-Known Text (WKT) y Well-Known Binary (WKB) del Open Geospatial Consortium para todos los tipos temporales. Presentamos a continuación las funciones de entrada y salida para los tipos de cuadro delimitador.

Un tbox se compone de dimensiónes de valor numérico y/o de tiempo. Para cada dimensión, se proporciona un rango, es decir, ya sea un intspan o un floatspan para la dimensión de valor y un tstzspan para la dimensión de tiempo. Ejemplos de entrada de valores tbox son los siguientes:

-- Dimensiones de valor y tiempo
SELECT tbox 'TBOXINT XT([1,3),[2001-01-01,2001-01-02])';
SELECT tbox 'TBOXFLOAT XT([1.5,2.5],[2001-01-01,2001-01-02])';
-- Sólo dimensión de valor
SELECT tbox 'TBOXINT X([1,3))';
SELECT tbox 'TBOXFLOAT X((1.5,2.5))';
-- Sólo dimensión de tiempo
SELECT tbox 'TBOX T((2001-01-01,2001-01-02))';

Un stbox se compone de dimensiónes espacial y/o temporal, donde las coordenadas de la dimensión espacial pueden ser 2D o 3D. Para la dimensión de tiempo se da un tstzspan, y para la dimensión espacial se dan los valores mínimos y máximos de las coordenadas, donde estas últimas pueden ser cartesianas (planas) o geodésicas (esféricas). Se puede especificar el SRID de las coordenadas; si no es el caso, se asume un valor de 0 (desconocido) y 4326 (correspondiente a WGS84), respectivamente, para coordenadas planas y geodésicas. Los cuadros geodésicos siempre tienen una dimensión Z para tener en cuenta la curvatura de la esfera o esferoide subyacente. Ejemplos de entrada de valores stbox son los siguientes:

-- Sólo dimensión de valor con coordenadas X e Y
SELECT stbox 'STBOX X((1.0,2.0),(1.0,2.0))';
-- Sólo dimensión de valor con coordenadas X, Y y Z
SELECT stbox 'STBOX Z((1.0,2.0,3.0),(1.0,2.0,3.0))';
-- Dimensiones de valor (con coordenadas X e Y) y de tiempo
SELECT stbox 'STBOX XT(((1.0,2.0),(1.0,2.0)),[2001-01-03,2001-01-03])';
-- Dimensiones de valor (con coordenadas X, Y y Z) y de tiempo
SELECT stbox 'STBOX ZT(((1.0,2.0,3.0),(1.0,2.0,3.0)),[2001-01-01,2001-01-03])';
-- Sólo dimensión de tiempo
SELECT stbox 'STBOX T([2001-01-03,2001-01-03])';
-- Sólo dimensión de valores con coordenadas geodéticas X, Y y Z
SELECT stbox 'GEODSTBOX Z((1.0,2.0,3.0),(1.0,2.0,3.0))';
-- Dimensiones de valor (con coordenadas geodéticas X, Y y Z) y de tiempo
SELECT stbox 'GEODSTBOX ZT(((1.0,2.0,3.0),(1.0,2.0,3.0)),[2001-01-04,2001-01-04])';
-- Sólo dimensión temporal para cuadro geodético
SELECT stbox 'GEODSTBOX T([2001-01-03,2001-01-03])';
-- Se indica el SRID
SELECT stbox 'SRID=5676;STBOX XT(((1.0,2.0),(1.0,2.0)),[2001-01-04,2001-01-04])';
SELECT stbox 'SRID=4326;GEODSTBOX Z((1.0,2.0,3.0),(1.0,2.0,3.0))';

Damos a continuación las funciones de entrada y salida de tipos de cuadro delimitador en formato textual (Well-Known Text o WKT) y binario (Well-Known Binary o WKB).

  • Devuelve la representación textual conocida (Well-Known Text o WKT)

    asText(box,maxdecdigits=15) → text

    El argumento maxdecdigits se puede utilizar para definir el número máximo de decimales para la salida de los valores de coma flotante (por defecto 15).

    SELECT asText(tbox 'TBOXFLOAT XT([1.123456789,2.123456789),[2001-01-01,2001-01-02))', 3);
    -- TBOXFLOAT XT([1.123, 2.123),[2001-01-01 00:00:00+01, 2001-01-02 00:00:00+01))
    SELECT asText(stbox 'STBOX Z((1.55,1.55,1.55),(2.55,2.55,2.55))', 0);
    -- STBOX Z((2,2,2),(3,3,3))
    
  • Devuelve la representación binaria conocida (Well-Known Binary o WKB)

    asBinary(box,endian text='') → bytea

    El resultado se codifica utilizando la codificación little-endian (NDR) o big-endian (XDR). Si no se especifica ninguna codificación, se utiliza la codificación de la máquina.

    SELECT asBinary(tbox 'TBOXFLOAT XT([1,2),[2001-01-01,2001-01-02))');
    -- \x0103270001009c57d3c11c000000fc2ef1d51c00000d0001000000000000f03f0000000000000040
    SELECT asBinary(tbox 'TBOXFLOAT XT([1,2),[2001-01-01,2001-01-02))', 'XDR');
    -- \x000300270100001cc1d3579c0000001cd5f12efc00000d013ff00000000000004000000000000000
    SELECT asBinary(stbox 'STBOX X((1,1),(2,2))');
    -- \x0101000000000000f03f0000000000000040000000000000f03f0000000000000040
    
  • Devuelve la representación hexadecimal binaria conocida (HexWKB) en formato texto

    asHexWKB(box,endian text='') → text

    El resultado se codifica utilizando la codificación little-endian (NDR) o big-endian (XDR). Si no se especifica ninguna codificación, se utiliza la codificación de la máquina.

    SELECT asHexWKB(tbox 'TBOXFLOAT XT([1,2),[2001-01-01,2001-01-02))');
    -- 0103270001009C57D3C11C000000FC2EF1D51C00000D0001000000000000F03F0000000000000040
    SELECT asHexWKB(tbox 'TBOXFLOAT XT([1,2)[2001-01-01,2001-01-02))', 'XDR');
    -- 000300270100001CC1D3579C0000001CD5F12EFC00000D013FF00000000000004000000000000000
    SELECT asHexWKB(stbox 'STBOX X((1,1),(2,2))');
    -- 0101000000000000F03F0000000000000040000000000000F03F0000000000000040
    
  • Entrar un cuadro delimitador en una representación binaria conocida (WKB)

    tboxFromBinary(bytea) → tbox

    stboxFromBinary(bytea) → stbox

    SELECT tboxFromBinary(
      '\x0103270001009c57d3c11c000000fc2ef1d51c00000d0001000000000000f03f0000000000000040');
    -- TBOXFLOAT XT([1,2),[2001-01-01,2001-01-02))
    SELECT stboxFromBinary(
      '\x0101000000000000f03f0000000000000040000000000000f03f0000000000000040');
    --  STBOX X((1,1),(2,2))
    
  • Entrar un cuadro delimitador temporal en una representación hexadecimal binaria conocida (HexWKB)

    tboxFromHexWKB(text) → tbox

    stboxFromHexWKB(text) → stbox

    SELECT tboxFromHexWKB(
      '0103270001009C57D3C11C000000FC2EF1D51C00000D0001000000000000F03F0000000000000040');
    -- TBOXFLOAT XT([1,2),[2001-01-01,2001-01-02)))
    SELECT stboxFromHexWKB(
      '0101000000000000F03F0000000000000040000000000000F03F0000000000000040');
    -- STBOX X((1,1),(2,2))