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 raquet_read 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
Devolver el ancho en píxeles de una tesela Raquet
width(raquet) → integer
Devolver el alto en píxeles de una tesela Raquet
height(raquet) → integer
Devolver el valor centinela nodata de una tesela Raquet
nodata(raquet) → float8
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, INT16, INT32, FLOAT32 o FLOAT64.
-- 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.trip4326);
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;