ST_RemoveIrrelevantPointsForView — 移除對於渲染特定幾何圖形矩形視圖不相關的點。
geometry ST_RemoveIrrelevantPointsForView(
geometry geom, box2d bounds, boolean cartesian_hint = false)
;
返回一個 geometry,其中不包含在給定的矩形視圖內渲染幾何圖形不相關的點。
此函數可用於快速預處理僅應在特定邊界內渲染的幾何圖形。
僅評估類型為 (MULTI)POLYGON 和 (MULTI)LINESTRING 的幾何圖形。其他幾何圖形保持不變。
與 ST_ClipByBox2D()
相比,此函數
會篩選出點,而無需計算新的交點,這樣可以避免捨入誤差,通常還能提高效能,
會返回具有相同或相似點數的幾何圖形,
會在指定的視圖內產生相同的渲染結果,並且
可能會引入自相交,這會使結果幾何圖形失效(請參閱下面的範例)。
如果 cartesian_hint
設定為 true
,則演算法會應用涉及笛卡爾數學的其他最佳化,以進一步減少結果點數。請注意,如果將結果座標投影到另一個(非笛卡爾)座標系統中再進行渲染,則使用此選項可能會引入渲染瑕疵。
![]() |
|
對於多邊形,此函數目前不保證結果有效。可以使用 ST_IsValid 檢查這種情況,並使用 ST_MakeValid 進行修復。 |
範例:ST_RemoveIrrelevantPointsForView() 應用於多邊形。藍色點保留,灰色視圖框內的渲染結果(淺藍色區域)也保留。
範例:由於僅篩選出點而未計算新點,因此 ST_RemoveIrrelevantPointsForView() 的結果可能包含自相交。
可用性:3.5.0
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('MULTILINESTRING((0 0, 10 0,20 0,30 0), (0 15, 5 15, 10 15, 15 15, 20 15, 25 15, 30 15, 40 15), (13 13,15 15,17 17))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- LINESTRING EMPTY
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'), ST_MakeEnvelope(12,12,18,18), true)); st_astext --------- POLYGON((15 30,30 0,0 0,15 30))
SELECT ST_AsText( ST_RemoveIrrelevantPointsForView( ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'), ST_MakeEnvelope(12,12,18,18))); st_astext --------- POLYGON((0 30,30 30,30 0,0 0,0 30))