名前

ST_LongestLine — 二つのジオメトリ間の2次元最長ラインを返します。

概要

geometry ST_LongestLine(geometry g);

geometry ST_LongestLine(geometry g1, geometry g2);

説明

二つのジオメトリのポイントで作られる2次元の最長ラインを返します。ラインはg1上から始まり、g2上で終わります。

最長ラインは常に二つの頂点となります。一つ以上の最長ラインが発見された場合には、この関数は最初のものを返します。ラインの長さはST_MaxDistanceが返す距離と同じです。

一つのジオメトリーだけが与えられるか、g1とg2が同じジオメトリーである場合には、ジオメトリーで最も離れた二つの頂点からなるラインが返ります。ラインの端点は ST_MinimumBoundingCircleで計算される円の上になります。

Availability: 1.5.0

Enhanced: 3.7.0 - 単一ジオメトリー入力に対応しました。

Longest line between a Point and a LineString.

Code
SELECT 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)
Figure
Geometry figure for visual-st-longestline-01

Longest line between two polygons.

Code
SELECT ST_LongestLine(
        'POLYGON ((190 150,20 10,160 70,190 150))',
        ST_Buffer('POINT(80 160)', 30)
            ) AS llinewkt;
出力:
LINESTRING(20 10,91.4805029709527 187.7163859753386)
Figure
Geometry figure for visual-st-longestline-02

一つのジオメトリを横切る最長のラインです。ラインの長さは最大距離と同じです。ラインの端点は最小境界円上に存在します。

Code
SELECT ST_LongestLine(geom) AS llinewkt,
                  ST_MaxDistance(geom) AS max_dist,
                  ST_Length(ST_LongestLine(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
Figure
Geometry figure for visual-st-longestline-03