Name

ST_LongestLine — 返回两个几何图形之间的二维最长直线。

Synopsis

geometry ST_LongestLine(geometry g1, geometry g2);

描述

返回两个几何图形的点之间的二维最长直线。返回的行开始于 g1 并在以下日期结束 g2

最长的线始终出现在两个顶点之间。如果找到多行,则该函数返回第一个最长的行。线的长度等于 ST_MaxDistance

如果G1和G2是相同的几何体,则返回几何体中距离最远的两个顶点之间的线。这是由以下公式计算的圆的直径 ST_MinimumBoundingCircle

可用性:1.5.0

示例

点和线之间的最长直线

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)

两个多边形之间的最长直线

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)

横跨单个几何体的最长线。这条线的长度等于最大距离。这条线是最小边界圆的直径。

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

另请参阅

ST_MaxDistance, ST_ShortestLine, ST_3DLongestLine, ST_MinimumBoundingCircle