共用方式為


Reduce (geometry 資料類型)

傳回在給定 geometry 執行個體上執行 Douglas-Peucker 演算法 (具有給定的容錯) 所產生之該執行個體的近似值。

語法

.Reduce ( tolerance )

引數

  • tolerance
    這是 float 類型的值。tolerance 是輸入到 Douglas-Peucker 演算法的容錯。

傳回類型

SQL Server 傳回類型:geometry

CLR 傳回類型: SqlGeometry

備註

如果是集合類型,這個演算法會在此例項包含的每一個 geometry 上獨立運作。

這個演算法並不會修改 Point 例項。

在 LineString 執行個體上,Douglas-Peucker 演算法會保留此執行個體的原始起點和終點,而且此演算法會反覆將原始執行個體中與結果偏差最大的點加回來,直到沒有任何點的偏差超過給定的容錯為止。

警告注意事項警告

Douglas-Peucker 演算法可能會產生無效的 LineString 執行個體,不過 Reduce 方法將針對產生的執行個體在內部呼叫 MakeValid 方法。這可能會導致系統從產生的執行個體中移除原始起點和終點。如需範例,請參閱<Showing an example where the original start and end points are lost>。

在 Polygon 執行個體上,Douglas-Peucker 演算法會獨立套用到每一個環形。如果傳回的 Polygon 執行個體無效,此方法將會產生 FormatException;例如,如果套用 Reduce() 來簡化執行個體中的每一個環形,就會建立無效的 MultiPolygon 執行個體,而且產生的環形將會重疊。

範例

使用 Reduce() 來簡化 LineString 執行個體

下列範例會建立 LineString 執行個體,並使用 Reduce() 來簡化此執行個體。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 0, 0 1, 1 0, 2 1, 3 0, 4 1)', 0);
SELECT @g.Reduce(.75).ToString();

顯示遺失原始起點和終點的範例

下列範例會顯示產生的執行個體可能不會保留原始起點和終點。發生這種情況的原因是保留原始起點和終點會產生無效的 LineString 執行個體。

DECLARE @g geometry = 'LINESTRING(0 0, 4 0, 2 .01, 1 0)';
DECLARE @h geometry = @g.Reduce(1);
SELECT @g.STIsValid() AS Valid
SELECT @g.ToString() AS Original, @h.ToString() AS Reduced;

請參閱

其他資源