Share via


Reduce (geometry データ型)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

指定された geometry インスタンスの近似を返します。 近似は、指定された許容範囲で、特定のインスタンスに対して Douglas-Peucker アルゴリズムの拡張を実行することにより生成されます。

構文

  
.Reduce ( tolerance )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

tolerance
float 型の値です。 tolerance は、近似アルゴリズムに入力する許容範囲です。

戻り値の型

SQL Server の戻り値の型: geometry

CLR 戻り値の型: SqlGeometry

解説

コレクションの場合、このアルゴリズムは個別に各 geometry インスタンスに含まれています。

このアルゴリズムによって、Point インスタンスが変更されることはありません。

LineStringCircularStringCompoundCurve のインスタンスでは、近似アルゴリズムによってインスタンスの元の始点と終点が維持されます。 次に、アルゴリズムでは、結果から最も離れた元のインスタンスの点が繰り返し追加されます。 この処理は、指定された許容範囲より大きく外れた点がなくなるまで続けられます。

Reduce() は、CircularString インスタンスに対して LineStringCircularStringCompoundCurve インスタンスを返します。 Reduce() は、CompoundCurve インスタンスに対して CompoundCurve または LineString インスタンスを返します。

Polygon インスタンスでは、近似アルゴリズムが各リングに個別に適用されます。 返された Polygon インスタンスが無効な場合、メソッドは FormatException を生成します。たとえば、インスタンス内の各リングを簡略化するために Reduce() が適用され、その結果リングが重なる場合、無効な MultiPolygon が作成されます。 外部リングがあり、内部リングがない CurvePolygon インスタンスでは、Reduce()CurvePolygonLineStringPoint インスタンスを返します。 CurvePolygon に内部リングがある場合、CurvePolygon または MultiPoint インスタンスが返されます。

円弧が検出されると、指定された許容範囲の半分以内で弦によって円弧を近似できるかどうかが近似アルゴリズムによってチェックされます。 弦がこの条件を満たす場合、円弧は計算において弦で置き換えられます。 弦がこの条件を満たしていない場合は、円弧が保持され、近似アルゴリズムが残りのセグメントに適用されます。

A. 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();  

B. CircularString に対し許容レベルを変えて Reduce() を使用する

次の例では、CircularString インスタンスに対して 3 つの許容レベルを適用して Reduce() を使用します。

 DECLARE @g geometry = 'CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0)'; 
 SELECT @g.Reduce(5).ToString(); 
 SELECT @g.Reduce(15).ToString(); 
 SELECT @g.Reduce(16).ToString();

この例を実行すると、次の出力が生成されます。

CIRCULARSTRING (0 0, 8 8, 16 0, 20 -4, 24 0) 
COMPOUNDCURVE (CIRCULARSTRING (0 0, 8 8, 16 0), (16 0, 24 0)) 
LINESTRING (0 0, 24 0)

返されるそれぞれのインスタンスには、終点 (0 0) と (24 0) が含まれます。

C. CompoundCurve に対し許容レベルを変えて Reduce() を使用する

次の例では、CompoundCurve インスタンスに対して 2 つの許容レベルを適用して Reduce() を使用します。

 DECLARE @g geometry = 'COMPOUNDCURVE(CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0),(24 0, 20 4, 16 0))';  
 SELECT @g.Reduce(15).ToString();  
 SELECT @g.Reduce(16).ToString();

この例では、2 番目の SELECT ステートメントによって LineString インスタンス (LineString(0 0, 16 0)) が返されます。

元の始点と終点が失われる例を示す

次の例では、元の始点と終点が結果のインスタンスで保持されない状況を示します。 このような動作は、元の始点と終点を保持した結果、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;  

参照

拡張された静的なジオメトリ メソッド