Name

ST_ClosestPointOfApproach — Renvoie une mesure au point d'approche le plus proche de deux trajectoires.

Synopsis

float8 ST_ClosestPointOfApproach(geometry track1, geometry track2);

Description

Renvoie la plus petite mesure pour laquelle les points interpolés le long des trajectoires données sont les moins éloignés les uns des autres.

Les entrées doivent être des trajectoires valides comme vérifié par ST_IsValidTrajectory. Null est retourné si les trajectoires ne se chevauchent pas dans leurs plages M.

Pour obtenir les points réels à la mesure calculée, utilisez ST_LocateAlong .

Disponibilité : 2.2.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

-- Return the time in which two objects moving between 10:00 and 11:00
-- are closest to each other and their distance at that point
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0, 10 0 5)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10, 12 1 2)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) b
), cpa AS (
  SELECT ST_ClosestPointOfApproach(a,b) m FROM inp
), points AS (
  SELECT ST_GeometryN(ST_LocateAlong(a,m),1) pa,
         ST_GeometryN(ST_LocateAlong(b,m),1) pb
  FROM inp, cpa
)
SELECT to_timestamp(m) t,
       ST_Distance(pa,pb) distance,
       ST_AsText(pa, 2) AS pa, ST_AsText(pb, 2) AS pb
FROM points, cpa;

               t               |      distance      |                  pa                  |                   pb                   
-------------------------------+--------------------+--------------------------------------+----------------------------------------
 2015-05-26 10:45:31.034483-07 | 1.9603683315139542 | POINT ZM (7.59 0 3.79 1432662331.03) | POINT ZM (9.1 1.24 3.93 1432662331.03)