Una tesela raquet se construye a partir de bytes de píxel ya disponibles o decodificando un archivo ráster, y lleva su georreferenciación QUADBIN en el propio valor.
Construir una celda temporal que contiene una celda sobre un valor de tiempo
tcell(cell,timestamptz) → tcellInst tcell(cell,tstzset) → tcellDiscSeq tcell(cell,tstzspan) → tcellSeq tcell(cell,tstzspanset) → tcellSeqSet
SELECT th3index(h3index '871fa4418ffffff', timestamptz '2001-01-01'); -- 871fa4418ffffff@2001-01-01 SELECT th3index(h3index '871fa4418ffffff', tstzspan '[2001-01-01, 2001-01-03]'); -- [871fa4418ffffff@2001-01-01, 871fa4418ffffff@2001-01-03] SELECT tquadbin(quadbin '48a6227affffffff', timestamptz '2001-01-01'); -- 48a6227affffffff@2001-01-01 SELECT tquadbin(quadbin '48a6227affffffff', tstzspan '[2001-01-01, 2001-01-03]'); -- [48a6227affffffff@2001-01-01, 48a6227affffffff@2001-01-03] SELECT ts2cell(s2cell '47c3c', timestamptz '2001-01-01'); -- 47c3c@2001-01-01 SELECT ts2cell(s2cell '47c3c', tstzspan '[2001-01-01, 2001-01-03]'); -- [47c3c@2001-01-01, 47c3c@2001-01-03]
Construir una celda temporal de un subtipo dado a partir de sus componentes
tcellInst(tcell) → tcellInst tcellSeq(tcell[],interp text='step') → tcellSeq tcellSeqSet(tcell[]) → tcellSeqSet
SELECT th3indexSeq(ARRAY[th3index '871fa4418ffffff@2001-01-01', th3index '871fa44a8ffffff@2001-01-02'], 'step'); -- [871fa4418ffffff@2001-01-01, 871fa44a8ffffff@2001-01-02] SELECT tquadbinSeq(ARRAY[tquadbin '48a6227affffffff@2001-01-01', tquadbin '485623ffffffffff@2001-01-02'], 'step'); -- [48a6227affffffff@2001-01-01, 485623ffffffffff@2001-01-02] SELECT ts2cellSeq(ARRAY[ts2cell '47c3c@2001-01-01', ts2cell '47c4@2001-01-02'], 'step'); -- [47c3c@2001-01-01, 47c4@2001-01-02]
Construye una tesela ráster Raquet a partir de sus bytes de píxeles, dimensiones, celda QUADBIN y tipo de píxel
raquet(bytea,width integer,height integer,quadbin bigint,pixtype text, nodata float8) → raquet
Empaqueta un arreglo de píxeles pixels de banda única en orden de fila mayor de width × height píxeles de tipo pixtype (uno de uint8, int8, uint16, int16, uint32, int32, uint64, int64, float16, float32 o float64), georreferenciado por la celda quadbin, en un único valor raquet autodescriptivo. El argumento nodata es opcional; cuando se omite (NULL) la tesela no lleva valor centinela de nodata. Se genera un error cuando el arreglo pixels es menor que width × height × el tamaño del píxel. Los píxeles de más de un byte son little-endian, que es el orden de bytes que les da la especificación RaQuet sea cual sea el orden de bytes del servidor, de modo que una tesela conserva sus valores cuando se lee en otra máquina. Un raquet es un valor de longitud variable, libre de GDAL, con una representación portátil en texto Hex-WKB y binaria, distinto de y coexistente con el tipo raster de PostGIS usado por rasterValue.
-- Package the loose tile columns of a Raquet table into raquet values
SELECT raquet(band_data, width, height, quadbin, 'float32',
nodata) AS tile FROM elevation_raquet;
-- A 2 x 2 UINT8 tile with no nodata
SELECT raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8');
Decodifica un archivo ráster en una tesela ráster Raquet mediante GDAL
raquetRead(bytea,quadbin bigint) → raquet raquetRead(text,quadbin bigint) → raquet
Lee los bytes de rasterfile, un ráster en cualquier formato compatible con GDAL (GeoTIFF, PNG, …), a través del sistema de archivos virtual /vsimem/ de GDAL, y empaqueta su primera banda, en orden de fila mayor, en un único valor raquet autodescriptivo georreferenciado por la celda quadbin. El tipo de datos de la banda debe ser uno de Byte, Int16, Int32, Float32 o Float64; el valor de nodata de la banda, cuando está definido, se traslada a la tesela. Como el archivo se suministra como bytes, no se requiere acceso a archivos del lado del servidor. GDAL realiza la decodificación, por lo que el controlador de formato del ráster debe estar permitido por la configuración postgis.gdal_enabled_drivers de PostGIS (que deshabilita todos los controladores de forma predeterminada); habilítelo con, por ejemplo, SET postgis.gdal_enabled_drivers = 'ENABLE_ALL'. Esta es la contraparte de ingesta del constructor raquet, que construye una tesela a partir de bytes de píxeles ya decodificados. Cuando se omite quadbin o es NULL, el identificador de la tesela se deriva de la georreferenciación del ráster: el ráster debe llevar una referencia espacial EPSG:3857 (Web-Mercator) y una geotransformación alineada con los ejes que describa una única tesela QUADBIN. Un ráster sin referencia espacial, uno que no esté en EPSG:3857, o una geotransformación rotada o no alineada con la cuadrícula de teselas provoca un error en lugar de ser forzado. La forma que recibe text lee en su lugar el archivo ráster del servidor en esa ruta, allí donde PostGIS permite leer una banda ráster almacenada fuera de la base de datos, como indica rasterValue.
-- Decode a GeoTIFF stored in a bytea column into a raquet tile SELECT raquetRead(file_bytes, quadbin) AS tile FROM elevation_files; -- Derive the QUADBIN cell from an EPSG:3857 GeoTIFF's georeferencing SELECT raquetRead(file_bytes) AS tile FROM elevation_files;