MultiLineString

MultiLineString は、0 個以上の geometryLineString インスタンスまたは geographyLineString インスタンスのコレクションです。

MultiLinestring インスタンス

次の図は、MultiLineString インスタンスの例です。

geometry MultiLineString インスタンスの例

この図は次のことを示しています。

  • 図 1 は、2 つの LineString 要素の 4 つの終点から成る境界を持つ単純な MultiLineString インスタンスです。

  • 図 2 の MultiLineString インスタンスは、LineString 要素の終点のみで交差しているため単純です。このインスタンスの境界は、重なっていない 2 つの終点です。

  • 図 3 の MultiLineString インスタンスは、一方の LineString 要素の内部で交差しているため単純ではありません。この MultiLineString インスタンスの境界は 4 つの終点です。

  • 図 4 は、単純でなく、閉じていない MultiLineString インスタンスです。

  • 図 5 は、単純な閉じていない MultiLineString です。このインスタンスが閉じていないのは、その LineStrings 要素が閉じていないからです。このインスタンスが単純なのは、内部で交差している LineStrings インスタンスがないからです。

  • 図 6 は、単純な閉じている MultiLineString インスタンスです。このインスタンスが閉じているのは、そのすべての要素が閉じているからです。このインスタンスが単純なのは、内部で交差している要素がないからです。

許容されるインスタンス

MultiLineString インスタンスが許容されるには、空であるか、許容される LineString インスタンスのみで構成されている必要があります。許容される LineString インスタンスの詳細については、「LineString」を参照してください。以下は、許容される MultiLineString インスタンスの例です。

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';

次の例では、2 つ目の LineString インスタンスが有効ではないため、System.FormatException がスローされます。

DECLARE @g geometry = 'MULTILINESTRING((1 1, 3 5),(-5 3))';

有効なインスタンス

MultiLineString インスタンスが有効となるには、次の条件を満たす必要があります。

  1. MultiLineString インスタンスを構成しているすべてのインスタンスが有効な LineString インスタンスである必要があります。

  2. MultiLineString インスタンスを構成している 2 つの LineString インスタンスを一定区間重ねることはできません。LineString インスタンスは、それ自体または他の LineString インスタンスと、有限数の点でのみ交差したり、接したりできます。

次の例は、3 つの有効な MultiLineString インスタンスと 1 つの無効な MultiLineString インスタンスを示しています。

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();

@g4 は無効です。2 つ目の LineString インスタンスが 1 つ目の LineString インスタンスと一定区間重なっているためです。これらは、無数の点で接しています。

次の例では、2 つの LineString 要素を含む SRID 0 の単純な geometryMultiLineString インスタンスを作成しています。

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');

このインスタンスを別の SRID で作成するには、STGeomFromText() または STMLineStringFromText() を使用します。次の例のように、Parse() を使用して、その後に SRID を変更することもできます。

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');
SET @g.STSrid = 13;