Capítulo 9. Tipos temporales: Operaciones de análisis

Tabla de contenidos

Simplificación
Reducción
Similaridad
Mosaicos multidimensionales
Operaciones de intervalos
Operaciones de mosaicos
Operaciones de fragmentación

Simplificación

  • Simplificar un flotante o un punto temporal asegurándose de que los valores consecutivos estén al menos separados por una cierta distancia o intervalo de tiempo

    minDistSimplify({tfloat,tpoint},mindist float) → {tfloat,tpoint}

    minTimeDeltaSimplify({tfloat,tpoint},mint interval) → {tfloat,tpoint}

    En el caso de puntos temporales la distancia se especifica en las unidades del sistema de coordenadas. Observe que la simplificación se aplica sólo a secuencias temporales o conjuntos de secuencias con interpolación lineal. En todos los demás casos, se devuelve una copia del punto temporal dado.

    SELECT minDistSimplify(tfloat '[1@2001-01-01,2@2001-01-02,3@2001-01-04,4@2001-01-05]', 1);
    -- [1@2001-01-01, 3@2001-01-04, 4@2001-01-05]
    SELECT asText(minDistSimplify(tgeompoint '[Point(1 1 1)@2001-01-01,
      Point(2 2 2)@2001-01-02, Point(3 3 3)@2001-01-04, Point(5 5 5)@2001-01-05)', sqrt(3)));
    -- [POINT Z (1 1 1)@2001-01-01, POINT Z (3 3 3)@2001-01-04, POINT Z (5 5 5)@2001-01-05)
    SELECT asText(minDistSimplify(tgeompoint '[Point(1 1 1)@2001-01-01,
      Point(2 2 2)@2001-01-02, Point(3 3 3)@2001-01-04, Point(4 4 4)@2001-01-05)', sqrt(3)));
    -- [POINT Z (1 1 1)@2001-01-01, POINT Z (3 3 3)@2001-01-04, POINT Z (4 4 4)@2001-01-05]
    
    SELECT minTimeDeltaSimplify(tfloat '[1@2001-01-01, 2@2001-01-02, 3@2001-01-04,
      4@2001-01-05]', '1 day');
    -- [1@2001-01-01, 3@2001-01-04, 4@2001-01-05]
    SELECT asText(minTimeDeltaSimplify(tgeogpoint '[Point(1 1 1)@2001-01-01,
      Point(2 2 2)@2001-01-02, Point(3 3 3)@2001-01-04, Point(5 5 5)@2001-01-05)', '1 day'));
    -- [POINT Z (1 1 1)@2001-01-01, POINT Z (3 3 3)@2001-01-04, POINT Z (5 5 5)@2001-01-05]
    
  • Simplificar un flotante o un punto temporal usando el algoritmo de Douglas-Peucker

    maxDistSimplify({tfloat,tgeompoint},maxdist float,syncdist=true) →

    {tfloat,tgeompoint}

    douglasPeuckerSimplify({tfloat,tgeompoint},maxdist float,syncdist=true) →

    {tfloat,tgeompoint}

    La diferencia entre las dos funciones es que maxDistSimplify usa una versión del algoritmo de un solo recorrido, mientras que douglasPeuckerSimplify usa el algoritmo recursivo estándar.

    La función elimina los valores or los puntos cuya distancia es menor que la distancia pasada como segundo argumento. En el caso de puntos temporales la distancia se especifica en las unidades del sistema de coordenadas. El tercer argumento se aplica solo a puntos temporales y especifica si se utiliza la distancia espacial o la distancia sincronizada. Observe que la simplificación se aplica sólo a secuencias temporales o conjuntos de secuencias con interpolación lineal. En todos los demás casos, se devuelve una copia del punto temporal dado.

    -- Only synchronous distance for temporal floats
    SELECT maxDistSimplify(tfloat '[1@2001-01-01, 2@2001-01-02, 1@2001-01-03, 3@2001-01-04,
      1@2001-01-05]', 1, false);
    -- [1@2001-01-01, 1@2001-01-03, 3@2001-01-04, 1@2001-01-05]
    -- Synchronous distance by default for temporal points
    SELECT asText(maxDistSimplify(tgeompoint '[Point(1 1)@2001-01-01, Point(2 2)@2001-01-02,
      Point(3 1)@2001-01-03, Point(3 3)@2001-01-05, Point(5 1)@2001-01-06]', 2));
    -- [POINT(1 1)@2001-01-01, POINT(3 3)@2001-01-05, POINT(5 1)@2001-01-06]
    -- Spatial distance
    SELECT asText(maxDistSimplify(tgeompoint '[Point(1 1)@2001-01-01, Point(2 2)@2001-01-02,
      Point(3 1)@2001-01-03, Point(3 3)@2001-01-05, Point(5 1)@2001-01-06]', 2, false));
    -- [POINT(1 1)@2001-01-01, POINT(5 1)@2001-01-06]
    
    -- Spatial vs synchronized distance
    SELECT asText(douglasPeuckerSimplify(tgeompoint '[Point(1 1)@2001-01-01, Point(6 1)@2001-01-06,
      Point(7 4)@2001-01-07]', 2.3, false));
    -- [POINT(1 1)@2001-01-01, POINT(7 4)@2001-01-07]
    SELECT asText(douglasPeuckerSimplify(tgeompoint '[Point(1 1)@2001-01-01, Point(6 1)@2001-01-06,
      Point(7 4)@2001-01-07]', 2.3, true));
    -- [POINT(1 1)@2001-01-01, POINT(6 1)@2001-01-06, POINT(7 4)@2001-01-07]
    

La diferencia entre la distancia espacial y la distancia sincronizada se ilustra en los dos últimos ejemplos anteriores y en la Figura 9.1, “Diferencia entre la distancia espacial y la distancia sincronizada.”. En el primer ejemplo, que usa la distancia espacial, se elimina el segundo instante ya que la distancia perperdicular entre POINT(2 2) y la línea definida por POINT(1 1) y POINT(7 4) es igual a 2.23. Por el contrario, en el segundo ejemplo se mantiene el segundo instante dado que la proyección de Point(6 2) en la marca de tiempo 2001-01-06 sobre el segmento de línea temporal da como resultado Point(6 3.5) y la distancia entre el punto original y su proyección es 2.5.

Figura 9.1. Diferencia entre la distancia espacial y la distancia sincronizada.

Diferencia entre la distancia espacial y la distancia sincronizada.

Un uso típico de la función douglasPeuckerSimplify es reducir el tamaño de un conjunto de datos, en particular con fines de visualización. Si la visualización es estática, se debe preferir la distancia espacial; si la visualización es dinámica o animada, se debe preferir la distancia sincronizada.