指定した geometry インスタンスの近似を返します。これは、指定された許容範囲で、特定のインスタンスに対して Douglas-Peucker アルゴリズムの拡張を実行することにより生成されます。
構文
.Reduce ( tolerance )
引数
- tolerance
float 型の値です。 tolerance は、近似アルゴリズムに入力するための許容範囲です。
戻り値の型
SQL Server の戻り値の型: geometry
CLR の戻り値の型: SqlGeometry
説明
コレクションの場合、このアルゴリズムはインスタンスに含まれるそれぞれの geometry ごとに個別に実行されます。
このアルゴリズムによって Point インスタンスが変更されることはありません。
LineString、CircularString、および CompoundCurve のインスタンスでは、近似アルゴリズムはインスタンスの元の始点と終点を保持し、指定された許容範囲を超えない範囲で、結果から最も離れた元のインスタンスの地点を追加する処理を繰り返します。
Reduce() は、CircularString インスタンスの LineString、CircularString、または CompoundCurve インスタンスを返します。 Reduce() は、CompoundCurve インスタンスの CompoundCurve インスタンスまたは LineString インスタンスを返します。
Polygon インスタンスでは、近似アルゴリズムが各リングに個別に適用されます。 返された Polygon インスタンスが無効な場合、メソッドは FormatException を生成します。たとえば、インスタンス内の各リングを簡略化するために Reduce() が適用され、その結果リングが重なる場合、無効な MultiPolygon が作成されます。 外部リングを持つ一方で内部リングを持たない CurvePolygon インスタンスの場合、Reduce() は、CurvePolygon インスタンス、LineString インスタンス、または Point インスタンスを返します。 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;