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
Transformaciones
Modificaciones
Restricciones
Operaciones de distancia
Similitud
Operaciones de caja delimitadora
Relaciones siempre y alguna vez
Relaciones espaciotemporales
Comparaciones
Mosaicos
Cajas delimitadoras
Agregaciones
Indexación

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 13, Poses temporales y cadenas de poses. 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.

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 (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)@2001-01-01', 6);
    -- POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1.123457 1.123457),0.5)@2001-01-01
    
  • Devuelve la representación extendida de texto conocido (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)@2001-01-01');
    -- SRID=25832;POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1 1),0.5)@2001-01-01
    
  • Devuelve la representación JSON de características móviles (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 (EWKB), la representación hexadecimal binaria conocida (HexWKB), o la representación hexadecimal extendida binaria conocida (HexEWKB)

    asEWKB(trgeometry [, endian text]) → bytea
    asHexWKB(trgeometry [, endian text]) → text
    asHexEWKB(trgeometry [, endian text]) → text
    

    Las funciones complementarias asHexWKB y asHexEWKB devuelven el texto codificado en hexadecimal de, respectivamente, la representación simple y la que incluye el SRID; ambas coinciden solo cuando el valor no tiene SRID, como en el ejemplo siguiente.

    SELECT length(asEWKB(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));
      Pose(Point(1 1), 0.5)@2001-01-01'));
    -- 130
    -- The bytes round-trip through the matching input function.
    SELECT asText(trgeometryFromHexEWKB(asHexEWKB(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));
      Pose(Point(1 1), 0.5)@2001-01-01')));
    -- POLYGON((0 0,1 0,1 1,0 1,0 0));Pose(POINT(1 1),0.5)@2001-01-01
    SELECT asText(trgeometryFromHexEWKB(asHexWKB(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));
      Pose(Point(1 1), 0.5)@2001-01-01')));
    -- POLYGON((0 0,1 0,1 1,0 1,0 0));Pose(POINT(1 1),0.5)@2001-01-01
    
  • Entrada desde la representación de texto conocido (WKT), desde la representación extendida de texto conocido (EWKT), desde la representación JSON de características móviles (MF-JSON), desde la representación extendida binaria conocida (EWKB), o desde la representación hexadecimal extendida binaria conocida (HexEWKB)

    trgeometryFromText(text) → trgeometry
    trgeometryFromEWKT(text) → trgeometry
    trgeometryFromMFJSON(text) → trgeometry
    trgeometryFromEWKB(bytea) → trgeometry
    trgeometryFromHexEWKB(text) → trgeometry
    
    SELECT asText(trgeometryFromEWKT('SRID=4326;Polygon((0 0,1 0,1 1,0 1,0 0));
      Pose(Point(1 1), 0.5)@2001-01-01'));
    -- POLYGON((0 0,1 0,1 1,0 1,0 0));Pose(POINT(1 1),0.5)@2001-01-01
    SELECT asText(trgeometryFromHexEWKB(asHexEWKB(trgeometry 'Polygon((0 0,1 0,1 1,0 1,0 0));
      Pose(Point(1 1), 0.5)@2001-01-01')));
    -- POLYGON((0 0,1 0,1 1,0 1,0 0));Pose(POINT(1 1),0.5)@2001-01-01