Capítulo 17. Índices de Celdas H3 Temporales

Tabla de contenidos

Entrada y Salida
Conversiones
Cobertura de Geometrías Estáticas
Funciones de Acceso
Inspección de Índices
Jerarquía
Conversiones de Latitud/Longitud
Aristas Dirigidas
Vértices
Recorrido de la Cuadrícula
Métricas
Comparaciones
Comparaciones Siempre y Alguna Vez
Comparaciones Temporales
Operadores de Caja Envolvente
Funciones que devuelven conjuntos
Relaciones Espaciales
Agregaciones
Indexación

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.

Entrada y Salida

Un valor th3index se introduce utilizando la sintaxis temporal estándar con el identificador de celda H3 de 64 bits subyacente. El analizador acepta la forma hexadecimal canónica (la que produce la CLI de H3 y h3_cell_to_string en el proyecto original), con un prefijo 0x opcional y como máximo 16 dígitos significativos. El valor debe además denotar algo del sistema de indexación H3, es decir, una celda, una arista dirigida o un vértice, de modo que un literal hexadecimal bien formado como 12345, que no es ninguno de los tres, se rechaza en lugar de almacenarse como un valor sin ubicación. 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.

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