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. Como para todo tipo espacial, la representación de una stbox no escribe su SRID, que escriben asEWKB y asHexEWKB.

    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
    
  • Devuelve la representación binaria conocida extendida (EWKB) o la representación hexadecimal binaria conocida extendida (HexEWKB) de una caja espaciotemporal

    asEWKB(stbox,endian text='') → bytea
    asHexEWKB(stbox,endian text='') → text
    

    El resultado es la representación que escriben asBinary y asHexWKB con el SRID de la caja, como todo tipo espacial escribe su SRID en su representación extendida.

    SELECT asEWKB(stbox 'SRID=3812;STBOX X((1,1),(2,2))');
    -- \x0141e40e0000000000000000f03f0000000000000040000000000000f03f0000000000000040
    SELECT asHexEWKB(stbox 'SRID=3812;STBOX X((1,1),(2,2))', 'XDR');
    -- 004100000EE43FF000000000000040000000000000003FF00000000000004000000000000000
    
  • Entrada desde la representación de texto conocido (WKT)

    boxFromText(text) → box
    

    En la función anterior, box reemplaza cualquier tipo de cuadro delimitador, a saber, tbox o stbox. La función es la inversa de asText: lee el texto en el que se escribe un literal del tipo, tanto de una constante como de una columna text, incluido el SRID de un cuadro delimitador espaciotemporal.

    SELECT tboxFromText('TBOXFLOAT XT([1,2],[2001-01-01,2001-01-02])');
    -- TBOXFLOAT XT([1, 2],[2001-01-01, 2001-01-02])
    SELECT stboxFromText('SRID=3812;STBOX XT(((1,1),(2,2)),[2001-01-01,2001-01-02])');
    -- SRID=3812;STBOX XT(((1,1),(2,2)),[2001-01-01, 2001-01-02])
    
  • 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))
    
  • Entrada de una caja espaciotemporal desde la representación binaria conocida extendida (EWKB) o la representación hexadecimal binaria conocida extendida (HexEWKB)

    stboxFromEWKB(bytea) → stbox
    stboxFromHexEWKB(text) → stbox
    
    SELECT stboxFromEWKB(asEWKB(stbox 'SRID=3812;STBOX X((1,1),(2,2))'));
    -- SRID=3812;STBOX X((1,1),(2,2))
    SELECT stboxFromHexEWKB(
      '0141E40E0000000000000000F03F0000000000000040000000000000F03F0000000000000040');
    -- SRID=3812;STBOX X((1,1),(2,2))