Tabla de contenidos
El tipo de índice de celda H3 temporal th3index representa el movimiento de los objetos como una secuencia de identificadores de celdas hexagonales H3. H3 de Uber es un sistema de cuadrícula global discreta que tesela la esfera en 122 celdas base en la resolución 0 y subdivide cada celda en 7 hijos en cada resolución más fina (hasta la resolución 15). Cada celda tiene un identificador entero de 64 bits que codifica la celda base, la resolución y la posición jerárquica.
El tipo th3index comparte su representación en disco con tbigint: ambos almacenan un entero temporal de 64 bits. El tipo SQL distinto existe únicamente para que el verificador de tipos rechace las funciones específicas de H3 cuando se aplican a trayectorias tbigint arbitrarias (y viceversa). Las conversiones desde y hacia tbigint son explícitas (AS ASSIGNMENT) y de coerción binaria solamente — sin coste en tiempo de ejecución pero requieren un :: explícito en SQL.
Como con otros tipos temporales, th3index tiene cuatro subtipos: Instant, secuencia discreta, secuencia continua con interpolación de pasos (las celdas H3 son discretas — la interpolación lineal carece de sentido), y SequenceSet.
La guía operativa sobre cuándo elegir th3index en lugar de tgeompoint o tgeogpoint; los peligros específicos de H3 que los consumidores deben anticipar (el orden int64 es arbitrario respecto a la geometría de la cuadrícula, la mezcla de resoluciones en las operaciones, las celdas pentagonales, la no preservación del orden de celdas en el ciclo de compactación, y el comportamiento en el antimeridiano y los polos a alta resolución); y las convenciones de durabilidad y almacenamiento se recogen en “Notas operativas”.
Un valor th3index se introduce utilizando la sintaxis temporal estándar con el identificador de celda H3 de 64 bits subyacente. El analizador acepta tanto la forma hexadecimal canónica (la que produce la CLI de H3 y h3_cell_to_string en el proyecto original) como el equivalente en decimal sin signo. El hexadecimal es idiomático en el ecosistema H3 y es lo que emite la función de salida — todos los ejemplos siguientes lo usan. Como referencia, el valor hexadecimal 831c02fffffffff empleado en los ejemplos corresponde al valor decimal 590464338553208831.
SELECT th3index '831c02fffffffff@2001-01-01';
SELECT th3index '{831c02fffffffff@2001-01-01, 831c00fffffffff@2001-01-02}';
SELECT th3index '[831c02fffffffff@2001-01-01, 831c00fffffffff@2001-01-02]';
SELECT th3index '{[831c02fffffffff@2001-01-01, 831c00fffffffff@2001-01-02],
[880326b885fffff@2001-01-03, 880326b88dfffff@2001-01-04]}';
El tipo acepta modificadores de tipo (typmod) para restringir una columna a un subtipo específico: Instant, Sequence, o SequenceSet.
SELECT th3index(Instant) '831c02fffffffff@2001-01-01';
SELECT th3index(SequenceSet) '{[831c02fffffffff@2001-01-01, 831c00fffffffff@2001-01-02]}';
-- ERROR: el tipo temporal (Instant) no coincide con el tipo de columna (Sequence)
SELECT th3index(Sequence) '831c02fffffffff@2001-01-01';
Las funciones asText, asBinary y asHexWKB serializan un valor th3index, y th3indexFromBinary y th3indexFromHexWKB lo reconstruyen. La forma hexadecimal WKB permite que una columna de índice H3 temporal se transfiera de ida y vuelta mediante un COPY basado en texto.
SELECT asHexWKB(th3index '831c02fffffffff@2001-01-01'); SELECT th3indexFromHexWKB(asHexWKB(th3index '831c02fffffffff@2001-01-01')); -- 831c02fffffffff@2001-01-01