Las operaciones de más abajo no tienen análogo en H3 ni en QUADBIN. Se presentan sobre una s2cell estática, ya que un identificador de celda las responde sin referencia al tiempo; las operaciones compartidas que presentan las secciones anteriores se aplican a un ts2cell a través de la notación tcell.
Devolver la cara del cubo de 0 a 5 sobre la que se asienta una celda S2
s2GetFace(s2cell) → integer
S2 proyecta la esfera sobre las seis caras de un cubo circunscrito y tiende una curva de Hilbert sobre cada una, de modo que la cara son los tres primeros bits del identificador y dos celdas de caras distintas no comparten ningún ancestro.
SELECT s2GetFace(s2cell '47c3c3'); -- 2 SELECT s2GetFace(geoToS2Cell(geography 'SRID=4326;Point(-122.4 37.8)', 10)); -- 4
Convertir entre una celda S2 y su token, la forma que publican las bibliotecas de S2
s2CellToToken(s2cell) → text s2TokenToCell(text) → s2cell ts2CellToToken(ts2cell) → ttext
Un token es el identificador en hexadecimal con sus ceros finales eliminados, de modo que una celda gruesa se lee más corta que una fina y el texto se ordena como lo hace el identificador.
SELECT s2CellToToken(s2cell '47c3c3');
-- 47c3c3
SELECT s2TokenToCell('47c3c3');
-- 47c3c3
SELECT asText(ts2CellToToken(ts2cell '47c3c3@2001-01-01'));
-- "47c3c3"@2001-01-01
Devolver el nivel de la celda más profunda que contiene a dos celdas S2
s2CommonAncestorLevel(s2cell,s2cell) → integer
Dos celdas de caras distintas del cubo no están contenidas por ninguna celda, y la función responde -1 para ellas.
SELECT s2CommonAncestorLevel(s2cell '47c3c3', s2cell '47c4'); -- 5 SELECT s2CommonAncestorLevel(s2cell '47c3c3', s2cell '808581'); -- -1
Devolver verdadero si la primera celda S2 contiene a la segunda
s2CellContains(s2cell,s2cell) → boolean
SELECT s2CellContains(s2cell '47c4', s2cell '47c3c3'); -- t
Devolver la primera y la última celda hoja que contiene una celda S2
s2RangeMin(s2cell) → s2cell s2RangeMax(s2cell) → s2cell
Los descendientes de una celda S2 ocupan un intervalo contiguo de la curva de Hilbert, de modo que una prueba de ascendencia es el par de comparaciones other >= s2RangeMin(cell) y other <= s2RangeMax(cell). Eso es lo que aporta S2 y no aporta una cuadrícula hexagonal ni de Web-Mercator, y es un filtro que alimenta el índice stbox más que una clave de índice propia.
SELECT s2RangeMin(s2cell '47c3c3'); -- 47c3c20000000001 SELECT s2RangeMax(s2cell '47c3c3'); -- 47c3c3ffffffffff
Devolver el descendiente de una celda S2 en la posición dada a lo largo de la curva de Hilbert
s2CellToChild(s2cell,level integer,position integer) → s2cell
El nivel es exactamente uno más fino que el de la propia celda, de modo que la posición va de 0 a 3; cellToChildren, que presenta la sección de jerarquía, responde todos los descendientes en cualquier nivel más fino.
SELECT s2CellToChild(s2cell '47c3c3', 11, 0); -- 47c3c24
Devolver la longitud en metros de una arista de una celda S2
s2EdgeLength(s2cell,edge integer) → float
La arista va del vértice del índice dado, que va de 0 a 3, al siguiente en sentido antihorario, y la longitud se mide sobre la esfera WGS84.
SELECT round(s2EdgeLength(s2cell '47c3c3', 0)::numeric, 3); -- 9270.048
Devolver las cuatro celdas que comparten una arista con una celda S2
s2EdgeNeighbors(s2cell) → s2cellset
Una celda S2 es un cuadrilátero, de modo que tiene cuatro vecinas por arista y ningún anillo de un radio dado; el disco de cuadrícula de H3 no tiene análogo en S2.
SELECT s2EdgeNeighbors(s2cell '47c3c3');
-- {"47c3c1", "47c3c5", "47c3dd", "47c3e9"}
Una cobertura de región, que responde el conjunto de celdas que aproxima una geometría arbitraria, es la única operación S2 para la que este capítulo no presenta ninguna signatura: las bibliotecas de S2 la publican y MobilityDB aún no lleva un núcleo para ella.