Un valor tcell comparte la misma representación en disco que tbigint. La conversión por coerción binaria entre ellos es explícita, requiere ::, de modo que las funciones específicas de celdas no puedan invocarse silenciosamente sobre trayectorias bigint arbitrarias.
Una tesela se convierte en la caja espaciotemporal de su huella, que es lo que da un índice espacial a una tabla de teselas.
Convertir entre un tcell y un tbigint
{tbigint,tcell}::{tcell,tbigint}
La conversión es una coerción binaria en ambas direcciones, de modo que no cuesta nada más allá del cambio de tipo. Da la vuelta completa: convertir una celda a tbigint y de vuelta devuelve la celda de la que se partió.
SELECT (tbigint '590464338553208831@2001-01-01')::th3index; -- 831c02fffffffff@2001-01-01 SELECT (tbigint '5234909528541102079@2001-01-01')::tquadbin; -- 48a6227affffffff@2001-01-01 SELECT (tbigint '5171187903383994368@2001-01-01')::ts2cell; -- 47c3c@2001-01-01
Convertir una celda temporal en un punto temporal geodésico o plano de centroides de celda
tcell::{tgeogpoint,tgeompoint}
La conversión de una celda QUADBIN responde un punto del plano Web-Mercator sobre el que se define la cuadrícula, mientras que la conversión de una celda S2 responde uno geodésico; cada cuadrícula declara la única conversión que exige su propia definición. H3 declara ambas, de modo que es la única cuadrícula en la que quien llama elige entre la representación geodésica y la plana en SRID 4326.
SELECT asText((th3index '831c02fffffffff@2001-01-01')::tgeogpoint, 6); -- POINT(-144.523991 49.716503)@2001-01-01 SELECT asText((th3index '831c02fffffffff@2001-01-01')::tgeompoint, 6); -- POINT(-144.523991 49.716503)@2001-01-01 SELECT asText((tquadbin '48a6227affffffff@2001-01-01')::tgeompoint, 6); -- POINT(4.394531 50.847573)@2001-01-01 SELECT asText((ts2cell '47c3c@2001-01-01')::tgeogpoint, 6); -- POINT(4.222019 50.936164)@2001-01-01
Convierte 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);
Convierte un ráster en una caja espaciotemporal
stbox(raster) → stbox
Devuelve la extensión del ráster en el sistema de referencia que el propio ráster declara, sin dimensión temporal. Esta es la única forma de un raster de PostGIS que la extensión declara, porque PostGIS no tiene stbox: el ancho, el alto, la georreferenciación y las propiedades de las bandas se leen con los accesores propios de PostGIS, que aquí no se repiten. La conversión también está disponible como una conversión de tipo.
WITH rast AS ( SELECT ST_MakeEmptyRaster(3, 3, 0.0, 3.0, 1.0, -1.0, 0.0, 0.0, 4326) AS r ) SELECT stbox(r) AS box, stbox(r) = r::stbox AS cast_agrees FROM rast; -- SRID=4326;STBOX X((0,0),(3,3)) | t -- The box states the reference system of the raster, not a fixed one SELECT stbox(ST_MakeEmptyRaster(2, 2, 0.0, 2.0, 1.0, -1.0, 0.0, 0.0, 3857)); -- SRID=3857;STBOX X((0,0),(2,2))
La extensión lleva la rotación de la geotransformación, de modo que un ráster sesgado responde la caja que contiene sus cuatro esquinas rotadas y no la que daría su escala por sí sola.
WITH plain AS ( SELECT ST_MakeEmptyRaster(2, 2, 0.0, 2.0, 1.0, -1.0, 0.0, 0.0, 4326) AS r ), skewed AS ( SELECT ST_MakeEmptyRaster(2, 2, 0.0, 2.0, 1.0, -1.0, 1.0, 0.0, 4326) AS r ) SELECT stbox((SELECT r FROM plain)) AS plain_box, stbox((SELECT r FROM skewed)) AS skewed_box; -- SRID=4326;STBOX X((0,0),(2,2)) | SRID=4326;STBOX X((0,0),(4,2))
La extensión lleva los operadores, las agregaciones y las clases de operadores de stbox, de modo que una tabla de rásteres se consulta por solapamiento espacial y se indexa sobre la conversión.
SELECT stbox(ST_MakeEmptyRaster(3, 3, 0.0, 3.0, 1.0, -1.0, 0.0, 0.0, 4326)) && stbox 'SRID=4326;STBOX X((1,1),(2,2))'; -- t