Name

ST_LongestLine — Renvoie la ligne 2D la plus longue entre deux géométries.

Synopsis

geometry ST_LongestLine(geometry g1, geometry g2);

Description

Renvoie la plus longue ligne bidimensionnelle entre les points de deux géométries. La ligne renvoyée commence sur g1 et se termine sur g2.

La ligne la plus longue se trouve toujours entre deux sommets. La fonction renvoie la première ligne la plus longue si plusieurs sont trouvées. La longueur de la ligne est égale à la distance renvoyée par ST_MaxDistance.

Si g1 et g2 sont la même géométrie, renvoie la ligne entre les deux sommets les plus éloignés l'un de l'autre dans la géométrie. Les extrémités de la ligne se trouvent sur le cercle calculé par ST_MinimumBoundingCircle.

Disponibilité : 1.5.0

Exemples

Ligne la plus longue entre un point et une ligne

SELECT ST_AsText( ST_LongestLine(
        'POINT (160 40)',
        'LINESTRING (10 30, 50 50, 30 110, 70 90, 180 140, 130 190)' )
        ) AS lline;
-----------------
LINESTRING(160 40,130 190)

Ligne la plus longue entre deux polygones

SELECT ST_AsText( ST_LongestLine(
        'POLYGON ((190 150, 20 10, 160 70, 190 150))',
        ST_Buffer('POINT(80 160)', 30)
            ) ) AS llinewkt;
-----------------
LINESTRING(20 10,105.3073372946034 186.95518130045156)

Ligne la plus longue traversant une seule géométrie. La longueur de la ligne est égale à la distance maximale. Les extrémités de la ligne sont situées sur le cercle de délimitation minimal.

SELECT ST_AsText( ST_LongestLine( geom, geom)) AS llinewkt,
                  ST_MaxDistance( geom, geom) AS max_dist,
                  ST_Length( ST_LongestLine(geom, geom)) AS lenll
FROM (SELECT 'POLYGON ((40 180, 110 160, 180 180, 180 120, 140 90, 160 40, 80 10, 70 40, 20 50, 40 180),
              (60 140, 99 77.5, 90 140, 60 140))'::geometry AS geom) AS t;

         llinewkt          |      max_dist      |       lenll
---------------------------+--------------------+--------------------
 LINESTRING(20 50,180 180) | 206.15528128088303 | 206.15528128088303