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 tipo de cuadro delimitador, es decir, tbox o stbox,
number representa cualquier tipo de base numérico, es decir, integer, bigint o float,
numspan representa cualquier tipo de rango numérico, es decir, intspan, bigintspan o floatspan,
numbers representa cualquier tipo de conjunto o de rango numérico, como integer, intset, intspan o intspanset,
times representa cualquier tipo de tiempo con granularidad timestamptz, a saber timestamptz, tstzset, tstzspan o tstzspanset,
tnumber representa cualquier tipo de número temporal, es decir, tint, tbigint o tfloat,
geo representa los tipos geometry o geography,
tgeo representa un tipo temporal geometría/geografía, es decir, tgeometry, tgeography, tgeompoint o tgeogpoint.
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))