MultiPolygon
MultiPolygon インスタンスは、0 個以上の Polygon インスタンスのコレクションです。
MultiPolygon インスタンス
次の図は、MultiPolygon インスタンスの例です。
この図は次のことを示しています。
図 1 は、2 つの Polygon 要素を持つ MultiPolygon インスタンスです。境界は、2 つの外部リングと 3 つの内部リングによって定義されています。
図 2 は、2 つの Polygon 要素を持つ MultiPolygon インスタンスです。境界は、2 つの外部リングと 3 つの内部リングによって定義されています。2 つの Polygon 要素は接点で交差しています。
許容されるインスタンス
MultiPolygon インスタンスが許容されるのは、次のいずれかの条件が満たされている場合です。
空の MultiPolygon インスタンスである。
MultiPolygon インスタンスを構成するすべてのインスタンスが、許容される Polygon インスタンスである。許容される Polygon インスタンスの詳細については、「Polygon」を参照してください。
次の例は、許容される MultiPolygon インスタンスを示しています。
DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
次の例は、System.FormatException がスローされる MultiPolygon インスタンスを示しています。
DECLARE @g geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3)))';
この MultiPolygon の 2 つ目のインスタンスは LineString インスタンスであり、許容される Polygon インスタンスではありません。
有効なインスタンス
MultiPolygon インスタンスが有効なのは、空の MultiPolygon インスタンスである場合か、次の条件を満たしている場合です。
MultiPolygon インスタンスを構成するすべてのインスタンスが、有効な Polygon インスタンスである。有効な Polygon インスタンスについては、「Polygon」を参照してください。
MultiPolygon インスタンスを構成する Polygon インスタンスが重なっていない。
次の例は、2 つの有効な MultiPolygon インスタンスと、1 つの無効な MultiPolygon インスタンスを示しています。
DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g2 は、2 つの Polygon インスタンスの接点が 1 つだけであるため有効です。@g3 は、2 つの Polygon インスタンスの内部が重なっているため無効です。
例
次の例では、geometryMultiPolygon インスタンスを作成し、2 つ目の構成要素の Well-Known Text (WKT) を返します。
DECLARE @g geometry;
SET @g = geometry::Parse('MULTIPOLYGON(((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');
SELECT @g.STGeometryN(2).STAsText();
次の例では、空の MultiPolygon インスタンスを作成します。
DECLARE @g geometry;
SET @g = geometry::Parse('MULTIPOLYGON EMPTY');