名称

ST_LongestLine — 返回两个几何体之间最长的二维线段。

概要

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