LineString
は、ポイントのシーケンスと、それらを接続する線分を表す 1 次元オブジェクトです。
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
インスタンスを有効にするには、次の条件を満たす必要があります。
LineString
インスタンスを受け入れる必要があります。LineString
インスタンスが空でない場合は、少なくとも 2 つの異なるポイントを含む必要があります。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)