名稱

ST_SetEffectiveArea — 使用 Visvalingam-Whyatt 演算法設定每個頂點的有效面積。

概要

geometry ST_SetEffectiveArea(geometry geom, float threshold = 0, integer set_area = 1);

描述

使用 Visvalingam-Whyatt 演算法設定每個頂點的有效面積。有效面積會儲存為頂點的 M 值。如果使用選用的 "threshold" 參數,則會傳回簡化後的幾何,其中僅包含有效面積大於或等於閾值的頂點。

當指定閾值時,此函數可用於伺服器端的簡化。另一種選擇是使用零的閾值。在這種情況下,將返回具有有效面積作為 M 值的完整幾何,客戶端可以使用它來非常快速地進行簡化。

實際上只會對(多)線和(多)多邊形執行操作,但您可以安全地使用任何類型的幾何來調用它。由於簡化是逐對象進行的,您也可以將 GeometryCollection 輸入此函數。

[Note]

請注意,返回的幾何可能會失去其簡單性(請參閱ST_IsSimple)。

[Note]

請注意,拓撲可能無法保留,並可能導致無效的幾何。請使用(請參閱ST_SimplifyPreserveTopology)來保留拓撲。

[Note]

輸出幾何將會遺失 M 值中所有先前的資訊。

[Note]

此函數會處理 3D,第三維度將會影響有效面積。

可用性:2.2.0

範例

計算 LineString 的有效面積。因為我們使用零的閾值,所以會返回輸入幾何中的所有頂點。

select ST_AsText(ST_SetEffectiveArea(geom)) all_pts, ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30
FROM (SELECT  'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
-result
 all_pts | thrshld_30
-----------+-------------------+
LINESTRING M (5 2 3.40282346638529e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.40282346638529e+38) | LINESTRING M (5 2 3.40282346638529e+38,7 25 49.5,10 10 3.40282346638529e+38)

                

另請參閱

ST_SimplifyVW