ST_3DLongestLine — 傳回兩個幾何物件之間的最長 3D 線段
geometry ST_3DLongestLine(
geometry g1, geometry g2)
;
傳回兩個幾何物件之間的最長 3 維線段。如果有多個最長線段,此函數會傳回第一個。傳回的線段從 g1 開始,到 g2 結束。此線段的 3D 長度等於 ST_3DMaxDistance 傳回的距離。
可用性:2.0.0
變更:2.2.0 - 如果輸入兩個 2D 幾何物件,則會傳回一個 2D 點(而不是假設遺失 Z 為 0 的舊行為)。在 2D 和 3D 的情況下,遺失的 Z 不再假設為 0。
此函數支援 3D,且不會丟棄 z 索引。
此函數支援多面體表面。
線字串和點 -- 3D 和 2D 最長線 SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line ) As foo; lol3d_line_pt | lol2d_line_pt -----------------------------------+---------------------------- LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100)
|
線字串和多點 -- 3D 和 2D 最長線 SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line ) As foo; lol3d_line_pt | lol2d_line_pt ---------------------------------+-------------------------- LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74)
|
多線字串和多邊形 -- 3D 和 2D 最長線 SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d, ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; lol3d | lol2d ------------------------------+-------------------------- LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10)
|