Capítulo 3. Tipos de cuadro delimitador

Tabla de contenidos

Entrada y salida
Constructores
Conversión de tipos
Accesores
Transformaciones
Sistema de referencia espacial
Operaciones 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:

-- Both value and time dimensions
SELECT tbox 'TBOXINT XT([1,3),[2001-01-01,2001-01-02])';
SELECT tbox 'TBOXBIGINT XT([1,3),[2001-01-01,2001-01-02])';
SELECT tbox 'TBOXFLOAT XT([1.5,2.5],[2001-01-01,2001-01-02])';
-- Only value dimension
SELECT tbox 'TBOXINT X([1,3))';
SELECT tbox 'TBOXBIGINT X([1,3))';
SELECT tbox 'TBOXFLOAT X((1.5,2.5))';
-- Only time dimension
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:

-- Only value dimension with X and Y coordinates
SELECT stbox 'STBOX X((1.0,2.0),(1.0,2.0))';
-- Only value dimension with X, Y, and Z coordinates
SELECT stbox 'STBOX Z((1.0,2.0,3.0),(1.0,2.0,3.0))';
-- Both value (with X and Y coordinates) and time dimensions
SELECT stbox 'STBOX XT(((1.0,2.0),(1.0,2.0)),[2001-01-03,2001-01-03])';
-- Both value (with X, Y, and Z coordinates) and time dimensions
SELECT stbox 'STBOX ZT(((1.0,2.0,3.0),(1.0,2.0,3.0)),[2001-01-01,2001-01-03])';
-- Only time dimension
SELECT stbox 'STBOX T([2001-01-03,2001-01-03])';
-- Only value dimension with X, Y, and Z geodetic coordinates
SELECT stbox 'GEODSTBOX Z((1.0,2.0,3.0),(1.0,2.0,3.0))';
-- Both value (with X, Y and Z geodetic coordinates) and time dimension
SELECT stbox 'GEODSTBOX ZT(((1.0,2.0,3.0),(1.0,2.0,3.0)),[2001-01-04,2001-01-04])';
-- Only time dimension for geodetic box
SELECT stbox 'GEODSTBOX T([2001-01-03,2001-01-03])';
-- SRID is given
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 Well-Known Text (WKT) y Well-Known Binary (WKB).

  • Devuelve la representación de texto conocido (WKT)

    asText(box,maxdecimaldigits integer=15) → text
    

    El argumento maxdecimaldigits 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, 2001-01-02))
    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 (WKB) o la representación hexadecimal binaria conocida (HexWKB)

    asBinary(box,endian text='') → bytea
    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 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
    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
    
  • Entrada desde la representación binaria conocida (WKB) o desde la representación hexadecimal binaria conocida (HexWKB)

    boxFromBinary(bytea) → box
    boxFromHexWKB(text) → box
    

    En las funciones anteriores, box reemplaza cualquier tipo de cuadro delimitador, a saber, tbox o stbox.

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