A continuación presentamos las funciones que calculan operaciones de distancia para poses temporales. Tenga en cuenta que para estas operaciones solo se considera el componente de punto, no la orientación.
Devuelve la distancia más pequeña alguna vez
{geo,pose,tpose} |=| {geo,pose,tpose} → float
SELECT tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]' |=| geometry 'Linestring(50 50,55 55)'; -- 67.88225099390856 SELECT tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]' |=| pose 'Pose(Point(1 1), 0.5)'; -- 1.4142135623730951 SELECT tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]' |=| pose 'Pose(Point(2 2), 0.2)'; -- 1.4142135623730951 SELECT tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]' |=| geometry 'Linestring(2 2,2 1,3 1)'; -- 1
El operador |=| se puede utilizar para realizar búsquedas del vecino más cercano utilizando un índice GiST o SP-GiST (ver “Indexación”).
Devuelve el instante de la primera pose temporal en el que los dos argumentos están a la distancia más cercana
nearestApproachInstant({geo,pose,tpose},{geo,pose,tpose}) → tpose
SELECT asText(nearestApproachInstant(tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]', geometry 'Linestring(50 50,55 55)')); -- Pose(POINT(2 2),0.3)@2001-01-01 SELECT asText(nearestApproachInstant(tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]', pose 'Pose(Point(1 1), 0.5)')); -- Pose(POINT(2 2),0.3)@2001-01-01
Devuelve la línea que conecta el punto de aproximación más cercano
shortestLine({geo,pose,tpose},{geo,pose,tpose}) → geometry
La función devuelve la primera línea que encuentre si hay más de una.
SELECT ST_AsText(shortestLine(tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]', geometry 'Linestring(50 50,55 55)')); -- LINESTRING(2 2,50 50) SELECT ST_AsText(shortestLine(tpose '[Pose(Point(2 2), 0.3)@2001-01-01, Pose(Point(2 2), 0.7)@2001-01-02]', pose 'Pose(Point(1 1), 0.5)')); -- LINESTRING(2 2,1 1)
Devuelve la distancia temporal
tpose <-> tpose → tfloat
SELECT round(tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]' <-> pose 'Pose(Point(2 2), 0.2)', 6); -- [1.414214@2001-01-01, 1.414214@2001-01-03] SELECT round(tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(1 1), 0.5)@2001-01-03]' <-> geometry 'Point(50 50)', 6); -- [69.296465@2001-01-01, 69.296465@2001-01-03] SELECT round(tpose '[Pose(Point(1 1), 0.3)@2001-01-01, Pose(Point(2 2), 0.5)@2001-01-03]' <-> tpose '[Pose(Point(1 2), 0.3)@2001-01-02, Pose(Point(2 1), 0.5)@2001-01-04]', 6); -- [0.707107@2001-01-02, 0.5@2001-01-02 12:00:00+01, 0.707107@2001-01-03]