Reduce (geometry データ型)
指定した 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;