次の方法で共有


LineString

LineString は、一連の点と、それらを結ぶ線分を表す 1 次元のオブジェクトです。

LineString インスタンス

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

geometry LineString インスタンスの例

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

  • 図 1 は、単純な閉じていない LineString インスタンスです。

  • 図 2 は、単純でない、閉じていない LineString インスタンスです。

  • 図 3 は、閉じている単純な LineString インスタンスです。したがって、このインスタンスはリングです。

  • 図 4 は、閉じている単純でない LineString インスタンスです。したがって、このインスタンスはリングではありません。

許容されるインスタンス

許容される LineString インスタンスは geometry 変数に入力できますが、有効な LineString インスタンスではない場合があります。LineString インスタンスが許容されるには、インスタンスが 2 つ以上の点で形成されているか、インスタンスが空である必要があります。次の LineString インスタンスは許容されます。

DECLARE @g1 geometry = 'LINESTRING EMPTY';
DECLARE @g2 geometry = 'LINESTRING(1 1,2 3,4 8, -6 3)';
DECLARE @g3 geometry = 'LINESTRING(1 1, 1 1)';

@g3 の LineString インスタンスは許容されますが、有効ではありません。

次の LineString インスタンスは許容されません。この場合、System.FormatException がスローされます。

DECLARE @g geometry = 'LINESTRING(1 1)';

有効なインスタンス

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

  1. LineString インスタンスが許容される必要があります。

  2. LineString インスタンスが空でない場合は、2 つ以上の異なる点が含まれている必要があります。

  3. LineString インスタンスでは、自身の区間どうしを重ねることはできません。

次の LineString インスタンスは有効です。

DECLARE @g1 geometry= 'LINESTRING EMPTY';
DECLARE @g2 geometry= 'LINESTRING(1 1, 3 3)';
DECLARE @g3 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0)';
DECLARE @g4 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();

次の LineString インスタンスは無効です。

DECLARE @g1 geometry = 'LINESTRING(1 4, 3 4, 2 4, 2 0)';
DECLARE @g2 geometry = 'LINESTRING(1 1, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid();
注記注意

LineString の重なりの検出は浮動小数点計算に基づいており、正確ではありません。

次の例は、3 つの点を持つ geometryLineString インスタンスを作成する方法を示しています。このインスタンスの SRID は 0 です。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);

LineString インスタンスのそれぞれの点には、Z (昇格) 値と M (メジャー) 値を含めることができます。次の例では、上の例で作成した LineString インスタンスに M 値を追加します。M および Z は NULL 値にすることができます。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1 NULL 0, 2 4 NULL 12.3, 3 9 NULL 24.5)', 0);