Un valor raquet es autodescriptivo: los accesores siguientes leen la georreferenciación y la disposición que transporta, de modo que una tesela empaquetada con el constructor raquet o decodificada con raquetRead puede inspeccionarse sin conservar las columnas sueltas a partir de las cuales se construyó.
Las teselas también admiten el conjunto completo de operadores de comparación. El orden es total y se define primero por la celda QUADBIN, luego por el tipo de píxel, el ancho, el alto y finalmente los bytes de píxeles; está pensado para indexación y deduplicación, no para una interpretación espacial. Una clase de operadores btree por defecto hace que ORDER BY, DISTINCT y las uniones por mezcla funcionen sobre columnas raquet, y una clase de operadores hash por defecto habilita las uniones y agregaciones hash.
Devolver la celda QUADBIN de una tesela Raquet
quadbin(raquet) → bigint
SELECT quadbin(raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8'));
-- 5193776270265024512
Devolver el ancho en píxeles de una tesela Raquet
width(raquet) → integer
SELECT width(raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8'));
-- 2
Devolver el alto en píxeles de una tesela Raquet
height(raquet) → integer
SELECT height(raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8'));
-- 2
Devolver el valor centinela nodata de una tesela Raquet
nodata(raquet) → float8
SELECT nodata(raquet('\x01020304'::bytea, 2, 2,
5193776270265024512, 'uint8', 255));
-- 255
-- The sentinel defaults to 0 when the constructor omits it.
SELECT nodata(raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8'));
-- 0
Devolver el nombre del tipo de dato de píxel de una tesela Raquet
pixtype(raquet) → text
El nombre devuelto es el que aceptan los constructores, es decir, uno de uint8, int8, uint16, int16, uint32, int32, uint64, int64, float16, float32 o float64. Los constructores leen el nombre sin distinguir mayúsculas de minúsculas, de modo que el nombre que el ráster de PostGIS da a un tipo de píxel pasa a ellos tal cual; el nombre devuelto aquí es la grafía en minúsculas que la especificación RaQuet da al campo type de una tesela, por lo que se compara igual a ese campo tal cual.
-- Leer la disposición de una tesela empaquetada
SELECT quadbin(tile), width(tile), height(tile), pixtype(tile), nodata(tile)
FROM (SELECT raquet('\x01020304'::bytea, 2, 2, 5193776270265024512, 'uint8') AS tile) t;
-- 5193776270265024512 | 2 | 2 | uint8 | 0
Convertir una tesela Raquet en una caja espaciotemporal
stbox(raquet) → stbox
Devuelve la huella de la tesela: la envolvente de longitud y latitud de su celda QUADBIN, en SRID 4326 y sin dimensión temporal. La huella se deriva únicamente de la celda, por lo que teselas que difieren en píxeles, dimensiones o tipo de píxel la comparten. La conversión también está disponible como conversión de tipo.
-- The footprint of a tile covering the north-eastern quadrant at zoom 1
SELECT round(stbox(raquet('\x01020304'::bytea, 2, 2, 5193776270265024512,
'uint8')), 6);
-- SRID=4326;STBOX X((0,0),(180,85.051129))
-- Keep the tiles whose footprint overlaps a region of interest
SELECT * FROM elevation_tiles
WHERE tile::stbox && stbox 'SRID=4326;STBOX X((0,0),(30,30))';
La huella admite los operadores, agregados y clases de operadores de stbox, por lo que una tabla de teselas se consulta por solapamiento espacial en cualquier nivel de zoom en lugar de por una prueba de igualdad sobre la celda QUADBIN en uno fijo. Indexar la conversión dota a la tabla de teselas de un índice espacial, y la extensión de un conjunto de teselas es la extensión de sus huellas.
-- A spatial index over the tile footprints CREATE INDEX elevation_tiles_gist ON elevation_tiles USING gist (stbox(tile)); CREATE INDEX elevation_tiles_spgist ON elevation_tiles USING spgist (stbox(tile)); -- The extent covered by a set of tiles SELECT extent(stbox(tile)) FROM elevation_tiles; -- Tiles a trajectory passes through, at whatever zoom levels the table holds SELECT t.tripid, r.tile FROM trips t, elevation_tiles r WHERE stbox(r.tile) && stbox(t.trip);
Comparar dos teselas Raquet
raquet = raquet → boolean raquet <> raquet → boolean raquet < raquet → boolean raquet <= raquet → boolean raquet >= raquet → boolean raquet > raquet → boolean
Las funciones que respaldan estos operadores son eq, ne, lt, le, ge y gt, junto con cmp(raquet,raquet) → integer, que devuelve -1, 0 o 1.
-- Dos teselas con la misma celda, disposición y píxeles son iguales
SELECT raquet('\x0102'::bytea, 2, 1, 5193776270265024512, 'uint8') =
raquet('\x0102'::bytea, 2, 1, 5193776270265024512, 'uint8');
-- true
-- Deduplicar teselas, lo que permiten las clases de operadores btree y hash
SELECT DISTINCT tile FROM elevation_tiles;