Devuelve la distancia más cercana
{geo,cbuffer,tcbuffer} |=| {geo,cbuffer,tcbuffer} → float
El operador |=| se puede utilizar para realizar búsquedas del vecino más cercano utilizando un índice GiST o SP-GiST (ver “Indexación”).
SELECT tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]' |=| geometry 'Linestring(50 50,55 55)'; -- 67.58225099390856 SELECT tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]' |=| cbuffer 'Cbuffer(Point(1 1), 0.5)'; -- 0.6142135623730951
TODO Devuelve el instante del primer búfer circular temporal en el que los dos argumentos están a la distancia más cercana
nearestApproachInstant({geo,cbuffer,tcbuffer},{geo,cbuffer,tcbuffer}) → tcbuffer
SELECT nearestApproachInstant(tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]', geometry 'Linestring(50 50,55 55)'); -- Cbuffer(Point(2 2),0.349928)@2001-01-01 02:59:44.402905+01 SELECT nearestApproachInstant(tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]', cbuffer 'Cbuffer(Point(1 1), 0.5)'); -- Cbuffer(Point(2 2),0.592181)@2001-01-01 17:31:51.080405+01
TODO Devuelve la línea que conecta el punto de aproximación más cercano entre los dos argumentos
shortestLine({geo,cbuffer,tcbuffer},{geo,cbuffer,tcbuffer}) → geometry
La función devuelve la primera línea que encuentre si hay más de una
SELECT ST_AsText(shortestLine(tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]', geometry 'Linestring(50 50,55 55)')); -- LINESTRING(50 50,2.212132034355964 2.212132034355964) SELECT ST_AsText(shortestLine(tcbuffer '[Cbuffer(Point(2 2), 0.3)@2001-01-01, Cbuffer(Point(2 2), 0.7)@2001-01-02]', cbuffer 'Cbuffer(Point(1 1), 0.5)')); -- LINESTRING(1.353553390593274 1.353553390593274,1.787867965644036 1.787867965644036)
TODO Devuelve la distancia temporal
{geo,cbuffer,tcbuffer} <-> {geo,cbuffer,tcbuffer} → tfloat
SELECT tcbuffer '[Cbuffer(Point(1 1), 0.3)@2001-01-01, Cbuffer(Point(1 1), 0.5)@2001-01-03]' <-> cbuffer 'Cbuffer(Point(1 1), 0.2)'; -- [2.34988300875063@2001-01-02 00:00:00+01, 2.34988300875063@2001-01-03 00:00:00+01] SELECT tcbuffer '[Cbuffer(Point(1 1), 0.3)@2001-01-01, Cbuffer(Point(1 1), 0.5)@2001-01-03]' <-> geometry 'Point(50 50)'; -- [25.0496666945044@2001-01-01 00:00:00+01, 26.4085688426232@2001-01-03 00:00:00+01] SELECT tcbuffer '[Cbuffer(Point(1 1), 0.3)@2001-01-01, Cbuffer(Point(1 1), 0.5)@2001-01-03]' <-> tcbuffer '[Cbuffer(Point(1 1), 0.3)@2001-01-02, Cbuffer(Point(1 1), 0.5)@2001-01-04]' -- [2.34988300875063@2001-01-02 00:00:00+01, 2.34988300875063@2001-01-03 00:00:00+01]
Devuelve la distancia espacial mínima, ignorando el tiempo
minDistance(tcbuffer,{geo,cbuffer}) → float
minDistance(tcbuffer,tcbuffer) → float (agregado)
El resultado es la distancia espacial entre las áreas barridas por los dos argumentos durante toda su vida útil, igual a ST_Distance(traversedArea(...), traversedArea(...)). La forma de dos argumentos de búfer circular temporal es un agregado, de modo que una combinación cruzada agrupada por una clave produce el mínimo sobre cada par del grupo.
SELECT minDistance(tcbuffer '[Cbuffer(Point(0 0), 0.5)@2001-01-01, Cbuffer(Point(10 0), 0.5)@2001-01-02]', geometry 'Point(5 5)'); -- 4.5 SELECT minDistance(tcbuffer '[Cbuffer(Point(0 0), 0.5)@2001-01-01, Cbuffer(Point(10 0), 0.5)@2001-01-02]', cbuffer 'Cbuffer(Point(5 5), 1)'); -- 3.5 SELECT g, minDistance(t1.Noise, t2.Noise) FROM Vessel v1, VesselTrip t1, Vessel v2, VesselTrip t2 WHERE v1.MMSI = t1.MMSI AND v2.MMSI = t2.MMSI GROUP BY t1.ShipTypeLabel, t2.ShipTypeLabel;