次の方法で共有


LineString (ラインストリング)

LineStringは、ポイントのシーケンスと、それらを接続する線分を表す 1 次元オブジェクトです。

LineString インスタンス

次の図は、 LineString インスタンスの例を示しています。

ジオメトリ LineString インスタンスの例

図に示すように、

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

  • 図 2 は、非シンプルで閉じられていない LineString インスタンスです。

  • 図 3 は、閉じた単純な LineString インスタンスであるため、リングです。

  • 図 4 は閉じた非シンプルな LineString インスタンスであるため、リングではありません。

受け入れ済みインスタンス

受け入れられた LineString インスタンスはジオメトリ変数に入力できますが、有効な 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 インスタンスは、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 つのポイントと 0 の SRID を持つ geometry``LineString インスタンスを作成する方法を示しています。

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)