名稱

ST_LongestLine — 傳回兩個幾何物件之間的最長 2D 線段。

概要

geometry ST_LongestLine(geometry g1, geometry g2);

描述

傳回兩個幾何物件點之間的最長 2 維線段。傳回的線段起點位於 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