CompoundCurve
は、0 個以上の連続するCircularString
またはジオメトリ型またはジオグラフィ型のLineString
インスタンスのコレクションです。
重要
CompoundCurve
サブタイプなど、このリリースの新しい空間機能の詳細な説明と例については、ホワイト ペーパー「SQL Server 2012 の新しい空間機能」をダウンロードしてください。
空の CompoundCurve
インスタンスをインスタンス化できますが、 CompoundCurve
を有効にするには、次の条件を満たす必要があります。
少なくとも 1 つの
CircularString
またはLineString
インスタンスを含む必要があります。CircularString
インスタンスまたはLineString
インスタンスのシーケンスは連続している必要があります。
CompoundCurve
に複数のCircularString
インスタンスとLineString
インスタンスのシーケンスが含まれている場合、最後のインスタンスを除くすべてのインスタンスの終了エンドポイントは、シーケンス内の次のインスタンスの開始エンドポイントである必要があります。 つまり、シーケンス内の前のインスタンスの終了ポイントが (4 3 7 2) である場合、シーケンス内の次のインスタンスの開始点は (4 3 7 2) である必要があります。 ポイントの Z (標高) と M (測定) の値も同じである必要があります。 2つの点に差異がある場合は、System.FormatException
が発生します。
CircularString
内のポイントは、Z または M の値を持つ必要はありません。 前のインスタンスの終了点に対して Z 値または M 値が指定されていない場合、次のインスタンスの開始点に Z 値または M 値を含めることはできません。 前のシーケンスの終了ポイントが (4 3) の場合、次のシーケンスの開始点は (4 3) である必要があります。(4 3 7 2) にすることはできません。
CompoundCurve
インスタンス内のすべてのポイントは、Z 値を持たないか、すべて同じ Z 値を持たなければなりません。
CompoundCurve インスタンス
次の図は、有効な CompoundCurve
型を示しています。
受け入れられたインスタンス
CompoundCurve
インスタンスは、空のインスタンスであるか、次の条件を満たしている場合に受け入れられます。
CompoundCurve
インスタンスに含まれるすべてのインスタンスは、円弧セグメント インスタンスとして受け入れられます。 許容される円弧セグメント インスタンスの詳細については、「 LineString 」と 「CircularString」を参照してください。CompoundCurve
インスタンス内のすべての円弧セグメントが接続されます。 次の円弧セグメントの最初の点は、前の円弧セグメントの最後の点と同じです。注
これには、Z 座標と M 座標が含まれます。 したがって、4 つの座標 X、Y、Z、M はすべて同じである必要があります。
どの包含インスタンスも空のインスタンスではない。
次の例は、受け入れられた CompoundCurve
インスタンスを示しています。
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
次の例は、受け入れられない CompoundCurve
インスタンスを示しています。 これらのインスタンスは System.FormatException
をスローします。
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';
有効なインスタンス
CompoundCurve
インスタンスは、次の条件を満たしている場合に有効です。
CompoundCurve
インスタンスが受け入れられます。CompoundCurve
インスタンスに含まれるすべての円弧セグメント インスタンスは有効なインスタンスです。
有効な CompoundCurve
インスタンスの例を次に示します。
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g3
は、 CircularString
インスタンスが有効であるため有効です。
CircularString
インスタンスの有効性の詳細については、「CircularString」を参照してください。
次の例は、無効なインスタンス CompoundCurve
示しています。
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g1
は無効です。2 番目のインスタンスが有効な LineString インスタンスではないためです。
@g2
は無効です。 LineString
インスタンスが無効です。
@g3
は無効です。 CircularString
インスタンスが無効です。 有効な CircularString
インスタンスと LineString
インスタンスの詳細については、「 CircularString 」および 「LineString」を参照してください。
例示
ある。 空の CompooundCurve を使用して geometry インスタンスをインスタンス化する
次の例は、空の CompoundCurve
インスタンスを作成する方法を示しています。
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');
B. 同じステートメントで CompoundCurve を使用してジオメトリ インスタンスを宣言およびインスタンス化する
次の例は、同じステートメント内のCompoundCurve
を使用してgeometry
インスタンスを宣言および初期化する方法を示しています。
DECLARE @g geometry = 'COMPOUNDCURVE ((2 2, 0 0),CIRCULARSTRING (0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0))';
C. CompoundCurve を使用した geography インスタンスのインスタンス化
次の例は、CompoundCurve
を使用してgeography
インスタンスを宣言および初期化する方法を示しています。
DECLARE @g geography = 'COMPOUNDCURVE(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. CompoundCurve インスタンスに四角形を格納する
次の例では、2 つの異なる方法を使用して、 CompoundCurve
インスタンスを使用して正方形を格納します。
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');
SELECT @g1.STLength(), @g2.STLength();
@g1
と@g2
の両方の長さは同じです。 この例では、 CompoundCurve
インスタンスが LineString
の 1 つ以上のインスタンスを格納できることに注意してください。
E. 複数の CircularString を含む CompoundCurve を使用してジオメトリ インスタンスをインスタンス化する
次の例は、2 つの異なる CircularString
インスタンスを使用して CompoundCurve
を初期化する方法を示しています。
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT @g.STLength();
これにより、次の出力が生成されます: 12.566370...これは 4π (4 * pi) に相当します。 この例の CompoundCurve
インスタンスは、半径が 2 の円を格納します。 前のコード例はどちらも、 CompoundCurve
を使用する必要はありませんでした。 最初の例では、 LineString
インスタンスの方が単純で、2 番目の例では CircularString
インスタンスの方が簡単でした。 ただし、次の例では、 CompoundCurve
で代替手段が提供される場所を示します。
F. CompoundCurve を使用して半円を格納する
次の例では、 CompoundCurve
インスタンスを使用して半円を格納します。
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');
SELECT @g.STLength();
G. CompoundCurve に複数の CircularString インスタンスと LineString インスタンスを格納する
次の例は、CompoundCurve
を使用して複数のCircularString
インスタンスとLineString
インスタンスを格納する方法を示しています。
DECLARE @g geometry
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');
SELECT @g.STLength();
H. Z 値と M 値を持つインスタンスの格納
次の例は、 CompoundCurve
インスタンスを使用して、Z と M の両方の値を持つ一連の CircularString
インスタンスと LineString
インスタンスを格納する方法を示しています。
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');
一 CircularString インスタンスを明示的に宣言する必要がある理由を示す
次の例は、 CircularString
インスタンスを明示的に宣言する必要がある理由を示しています。 プログラマは、 CompoundCurve
インスタンスに円を格納しようとしています。
DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');
SELECT 'Circle One', @g1.STLength() AS Perimeter; -- gives an inaccurate amount
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT 'Circle Two', @g2.STLength() AS Perimeter; -- now we get an accurate amount
出力は次のとおりです。
Circle One11.940039...
Circle Two12.566370...
円 2 の境界は約 4π (4 * pi) であり、これは境界の実際の値です。 ただし、円 1 の境界は非常に不正確です。 Circle One の CompoundCurve
インスタンスには、1 つの円弧セグメント (ABC) と 2 つの線分 (CD、DA) が格納されます。
CompoundCurve
インスタンスは、円を定義するために 2 つの円弧セグメント (ABC、CDA) を格納する必要があります。
LineString
インスタンスは、Circle One の CompoundCurve
インスタンスの 2 番目のポイント セット (4 2、2 4、0 2) を定義します。
CompoundCurve
内でCircularString
インスタンスを明示的に宣言する必要があります。
こちらもご覧ください
STIsValid (geometry データ型)STLength (geometry データ型)STStartPoint (geometry データ型)STEndpoint (geometry データ型)LineStringCircularString空間データ型の概要Point