Las siguientes funciones auxiliares estáticas devuelven un cellset, el tipo compañero de colección finita de cell. Operan sobre una cell estática o sobre un cellset y no se elevan a tcell, quedando la elevación temporal aplazada a la espera de una primitiva tset<T>.
Las celdas QUADBIN que cubre una trayectoria se devuelven en un arreglo, que es la clave de unión por la que se lee una tabla Raquet.
Todas las celdas dentro de k pasos de cuadrícula desde el origen
gridDisk(h3index,integer) → h3indexset gridDisk(quadbin,integer) → quadbinset s2EdgeNeighbors(s2cell) → s2cellset
El disco incluye el origen, que es todo el disco cuando k = 0. Su forma sigue a la cuadrícula: en la cuadrícula cuadrada QUADBIN el disco en el paso k es el bloque de (2k+1)×(2k+1) celdas centrado en el origen, mientras que en la cuadrícula hexagonal H3 es el anillo de hexágonos a esa cantidad de pasos y todo lo que hay dentro de él. S2 presenta las cuatro celdas que comparten una arista con el origen y no toma un número de pasos, de modo que responde el disco en k = 1 menos el propio origen.
SELECT gridDisk(h3index '871fa44a8ffffff', 1);
/* {"871fa44a8ffffff", "871fa44a9ffffff", "871fa44aaffffff", "871fa44abffffff",
"871fa44acffffff", "871fa44adffffff", "871fa44aeffffff"} */
SELECT gridDisk(quadbin '48a6227affffffff', 1);
/* {"48a6226dffffffff", "48a6226fffffffff", "48a62278ffffffff", "48a62279ffffffff",
"48a6227affffffff", "48a6227bffffffff", "48a622c5ffffffff", "48a622d0ffffffff",
"48a622d1ffffffff"} */
SELECT s2EdgeNeighbors(s2cell '47c3c');
-- {"47c14", "47c24", "47c34", "47c44"}
Todos los hijos de una celda en la resolución de destino dada
cellToChildren(h3index,integer) → h3indexset cellToChildren(quadbin,integer) → quadbinset cellToChildren(s2cell,integer) → s2cellset
El número de hijos es el factor de ramificación de la cuadrícula: cuatro para una celda de árbol cuaternario QUADBIN o S2, siete para una celda H3. La función auxiliar es estática, siendo los hijos un conjunto por instante cuya elevación temporal queda aplazada a la espera de una primitiva tset<T>.
SELECT cellToChildren(h3index '831c02fffffffff', 4);
/* {"841c021ffffffff", "841c023ffffffff", "841c025ffffffff", "841c027ffffffff",
"841c029ffffffff", "841c02bffffffff", "841c02dffffffff"} */
SELECT cellToChildren(quadbin '48a6227affffffff', 11);
-- {"48b6227a3fffffff", "48b6227a7fffffff", "48b6227abfffffff", "48b6227affffffff"}
SELECT cellToChildren(s2cell '47c3c', 8);
-- {"47c39", "47c3b", "47c3d", "47c3f"}
Representación compactada de un conjunto de celdas, fusionándose las celdas más finas en su padre siempre que esté presente el conjunto completo de hijos del padre
h3CompactCells(h3indexset) → h3indexset
La compactación se presenta solo para H3: es la única cuadrícula para la que MobilityDB lleva el núcleo, y las formas para QUADBIN y S2 aún no están implementadas.
SELECT h3CompactCells(cellToChildren(h3index '831c02fffffffff', 4));
-- {"831c02fffffffff"}
Representación descompactada en la resolución dada, la inversa de compactCells
h3UncompactCells(h3indexset,integer) → h3indexset
SELECT numValues(h3UncompactCells(h3CompactCells( cellToChildren(h3index '831c02fffffffff', 4)), 4)); -- 7
Devuelve las celdas QUADBIN distintas en un nivel de zoom cubiertas por una trayectoria
quadbins(tgeompoint,zoom integer) → bigint[]
Devuelve el conjunto de celdas QUADBIN únicas que cubre la trayectoria. Una trayectoria que no afirma nada entre sus instantes cubre las teselas que los contienen; una que se mueve entre ellos cubre además todas las teselas que atraviesa por el camino, ya que el segmento se recorre tesela a tesela. El resultado es adecuado como clave de unión en la cláusula WHERE contra una tabla Raquet, donde una tesela que el trayecto atraviesa pero el conjunto omite es una tesela que la unión nunca lee. El parámetro zoom debe estar en [0, 15].
-- Three instants spanning three tiles at zoom 3
SELECT quadbins(tgeompoint 'SRID=4326;
{Point(-60 45)@2024-01-01, Point(0 45)@2024-01-02, Point(60 45)@2024-01-03}', 3);
-- {5202501994543054848,5203346419473186816,5203416788217364480}
-- Count of Raquet tiles a ship trajectory overlaps at zoom 8
SELECT array_length(quadbins(trip, 8),
1) AS tile_count FROM trips ORDER BY tile_count DESC;