Capítulo 14. Geometrías rígidas temporales

Tabla de contenidos

Entrada y salida
Constructores
Conversión de tipos
Accesores
Área recorrida
Funciones espaciales
Métricas de movimiento
Modificaciones
Restricciones espaciales
Operaciones de distancia
Similitud
Comparaciones
Operadores de caja delimitadora
Mosaicos
Cajas delimitadoras
Agregaciones
Indexación
Guía de producción
Cuándo usar trgeometry frente a tpose frente a tgeometry
Convenciones de marco
Riesgos numéricos
Durabilidad y almacenamiento

Una geometría rígida temporal (trgeometry) es una geometría de referencia 2D estática —normalmente un polígono que describe la forma de un cuerpo en movimiento— emparejada con una pose temporal (tpose) que describe cómo esa geometría se traslada y rota a lo largo del tiempo. La geometría materializada en el instante t es la geometría de referencia rotada y trasladada de acuerdo con la pose interpolada en t.

Esta es la representación natural para objetos en movimiento cuya forma importa, no solo su posición. El ejemplo motivador es el tráfico marítimo AIS, donde el casco de cada barco (un pentágono derivado de los desplazamientos de antena A, B, C, D) sigue una trayectoria de pose definida por informes de latitud/longitud y rumbo. La geometría materializada en cualquier instante es el contorno real del barco en ese momento.

El tipo trgeometry se construye sobre Capítulo 11, Poses temporales. La mayoría de los operadores de acceso, comparación, topológicos, de posición y de indexación tienen la misma forma que las funciones tpose correspondientes; este capítulo cubre la superficie específica de trgeometry: la materialización de pose a forma, el área recorrida, la distancia materializada y las restricciones espaciales sobre la trayectoria del centroide.

La guía operativa para elegir entre trgeometry, tpose y tgeometry; las convenciones de marco que la implementación impone (forma de referencia solo 2D, una única geometría de referencia compartida por fila, requisito de mismo SRID, semántica de restricción espacial basada en el centroide); los riesgos numéricos que las cargas de trabajo de producción deben anticipar (advertencia de muestreo para traversedArea en segmentos de rotación, tolerancia de submuestreo adaptativo en la distancia materializada, rechazo de SRID mixtos); y las convenciones de durabilidad y almacenamiento se recopilan en “Guía de producción”.

Entrada y salida

Un literal trgeometry empareja una geometría de referencia con una pose temporal. La geometría de referencia va primero, separada de la pose por un punto y coma; la pose sigue la sintaxis estándar de tpose (instante, secuencia o conjunto de secuencias).

SELECT trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));Pose(Point(0 0), 0.5)@2001-01-01';
SELECT trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));{Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(5 0), 0.5)@2001-01-02, Pose(Point(0 0), 0.0)@2001-01-03}';
SELECT trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));[Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(10 0), 1.5)@2001-01-02]';
SELECT trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));{[Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(5 0), 0.0)@2001-01-02], [Pose(Point(0 0), 0.0)@2001-01-04, Pose(Point(2 0), 0.0)@2001-01-05]}';

La geometría de referencia puede ser cualquier polígono 2D o superficie poliédrica. La interpolación de la pose es lineal en la traslación y de camino angular más corto en la rotación. Los SRID se heredan de la geometría de referencia y de la pose; deben coincidir.

Se puede especificar un SRID para una trgeometry ya sea al comienzo del literal o antes de la geometría de referencia, como se muestra a continuación.

SELECT trgeometry 'SRID=25832;Polygon((0 0,1 0,1 1,0 1,0 0));Pose(Point(0 0), 0.5)@2001-01-01';
SELECT trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));SRID=25832;Pose(Point(0 0), 0.5)@2001-01-01';

La interpolación escalonada también se puede especificar de la misma manera que para otros tipos temporales:

SELECT trgeometry 'Interp=Step;Polygon((0 0,1 0,1 1,0 1,0 0));[Pose(Point(0 0), 0.0)@2001-01-01, Pose(Point(10 0), 0.0)@2001-01-02]';

Se admiten los formatos de transmisión estándar.

  • Devuelve la representación de texto conocido (Well-Known Text o WKT)

    asText({trgeometry,trgeometry[]} [, maxdecimaldigits int=15]) → text

    SELECT asText(trgeometry 'Polygon((1 1,2 2,3 1,1 1));Pose(Point(1.123456789 1.123456789), 0.5)@2000-01-01', 6);
    -- POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1.123457 1.123457),0.5)@Sat Jan 01 00:00:00 2000 PST
    
  • Devuelve la representación extendida de texto conocido (Extended Well-Known Text o EWKT), prefijada con el SRID

    asEWKT({trgeometry,trgeometry[]} [, maxdecimaldigits int=15]) → text

    SELECT asEWKT(trgeometry 'SRID=25832;Polygon((1 1,2 2,3 1,1 1));Pose(Point(1 1),0.5)@2000-01-01');
    -- SRID=25832;POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1 1),0.5)@Sat Jan 01 00:00:00 2000 PST
    
  • Devuelve la representación JSON de características móviles (Moving Features JSON o MF-JSON)

    asMFJSON(trgeometry [, options int=0 [, flags int=0 [, maxdecimaldigits int=15]]]) → text

    SELECT asMFJSON(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));Pose(Point(0 0),0)@2001-01-01');
    
  • Devuelve la representación extendida binaria conocida (Extended Well-Known Binary o EWKB)

    asEWKB(trgeometry [, endian text]) → bytea

    La función complementaria asHexEWKB devuelve los mismos bytes como un texto codificado en hexadecimal.

  • Cada formato de salida tiene un analizador complementario:

    trgeometryFromText(text) → trgeometry

    trgeometryFromEWKT(text) → trgeometry

    trgeometryFromMFJSON(text) → trgeometry

    trgeometryFromEWKB(bytea) → trgeometry

    trgeometryFromHexEWKB(text) → trgeometry