Tabla de contenidos
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:
box
representa cualquier tipos cuadro delimitador, es decir tbox
o stbox
.
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).
Obtener 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))
Obtener 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
Obtener 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))