ST_Segmentize — 返回一個修改後的幾何/地理物件,其線段長度都不超過給定的距離。
geometry ST_Segmentize(
geometry geom, float max_segment_length)
;
geography ST_Segmentize(
geography geog, float max_segment_length)
;
返回一個修改後的幾何/地理物件,其線段長度都不超過 max_segment_length
。長度計算以 2D 方式進行。線段總是分割成等長的小線段。
對於幾何物件,最大長度單位是空間參考系統的單位。
對於地理物件,最大長度單位是公尺。距離計算是在球面上進行。新增的頂點沿著由線段端點定義的球面大圓弧創建。
![]() |
|
此操作只會縮短長線段。它不會加長短於最大長度的線段。 |
![]() |
|
對於包含長線段的輸入,指定一個相對較短的 |
可用性: 1.2.2
增強功能: 3.0.0 線段化幾何物件現在會產生等長的小線段。
增強功能: 2.3.0 線段化地理物件現在會產生等長的小線段。
增強功能: 2.1.0 引入了對地理物件的支援。
變更: 2.1.0 由於引入了對地理物件的支援,使用 ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5)
會導致不明確的函式錯誤。輸入需要正確地指定為幾何或地理物件。請使用 ST_GeomFromText、ST_GeogFromText 或強制轉換為所需的類型 (例如 ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )
線段化一條線。長線段會均勻分割,而短線段則不會分割。
SELECT ST_AsText(ST_Segmentize( 'MULTILINESTRING((0 0, 0 1, 0 9),(1 10, 1 18))'::geometry, 5 ) ); --------------------------------------------------- MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))
線段化一個多邊形
SELECT ST_AsText( ST_Segmentize(('POLYGON((0 0, 0 8, 30 0, 0 0))'::geometry), 10)); ------------------------------------------------------- POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))
線段化一條地理線,使用 2000 公里的最大線段長度。頂點是沿著連接端點的大圓弧新增的。
SELECT ST_AsText( ST_Segmentize(('LINESTRING (0 0, 60 60)'::geography), 2000000)); ------------------------------------------------------------- LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)
沿著大圓弧線段化的地理線