LineString

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

LineString インスタンス

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

geometry LineString インスタンスの例

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

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

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

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

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

許容されるインスタンス

許容される LineString インスタンスはジオメトリ変数に入力できますが、これらが有効な LineString インスタンスであるとは限りません。 LineString インスタンスが許容されるには、次の条件を満たす必要があります。 インスタンスは、2 つ以上の異なる点から構成されているか、または空である必要があります。 次に示す LineString instances インスタンスは許容されます。

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 インスタンスは、それ自体を 2 つ以上の連続する点の区間に重ねることはできない。

次に示す 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 つの点を持つ geometry LineString インスタンスを作成する方法を示しています。このインスタンスの 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);

次の例は、同じ 2 つの点を持つ geometry LineString インスタンスを作成する方法を示しています。 IsValid 呼び出しは、LineString インスタンスが無効であることを示します。MakeValid 呼び出しは、LineString インスタンスを Point に変換します。

DECLARE @g geometry
SET @g = geometry::STGeomFromText('LINESTRING(1 3, 1 3)',0);
IF @g.STIsValid() = 1
  BEGIN
     SELECT @g.ToString() + ' is a valid LineString.';  
  END
ELSE
  BEGIN
     SELECT @g.ToString() + ' is not a valid LineString.';
     SET @g = @g.MakeValid();
     SELECT @g.ToString() + ' is a valid Point.';  
  END

上のコード スニペットは、次の結果を返します。

LINESTRING(1 3, 1 3) is not a valid LineString
POINT(1 3) is a valid Point.

関連項目

参照

STLength (geometry データ型)

STStartPoint (geometry データ型)

STEndpoint (geometry データ型)

STPointN (geometry データ型)

STNumPoints (geometry データ型)

STIsRing (geometry データ型)

STIsClosed (geometry データ型)

STPointOnSurface (geometry データ型)

概念

空間データ (SQL Server)