CircularString
CircularString は、0 個以上の連続する円弧セグメントのコレクションです。 円弧セグメントは、2 次元平面内の 3 つの点によって定義された曲線セグメントです。最初のポイントを 3 番目のポイントと同じにすることはできません。 円弧セグメントの 3 つのポイントすべてが同一線上にある場合は、円弧セグメントが直線セグメントとして扱われます。
重要 |
---|
CircularString サブタイプを含め、このリリースの新しい空間機能の詳細な説明とサンプルについては、ホワイト ペーパー「SQL Server 2012 の新しい空間機能」をダウンロードして参照してください。 |
CircularString インスタンス
次の図は有効な CircularString インスタンスを示しています。
許容されるインスタンス
CircularString インスタンスが空か、含まれているポイント n の数が奇数である場合 (n > 1) は、このインスタンスが許容されます。 次に示す CircularString インスタンスは許容されます。
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';
@g3 の場合、CircularString インスタンスは許容されることがありますが、有効ではありません。 次に示す CircularString インスタンスの宣言は許容されません。 この宣言は System.FormatException をスローします。
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
有効なインスタンス
有効な CircularString インスタンスは、空であるか、または次の属性を持つ必要があります。
少なくとも 1 つの円弧のセグメントが含まれている (つまり、最低限 3 つのポイントがある)。
最後のセグメントを除き、シーケンス内の各円弧セグメントの最後エンドポイントが、シーケンス内の次のセグメントの最初のエンドポイントになっている。
ポイントの数が奇数である。
このインスタンス自体を間隔に重ねることはできない。
CircularString が直線セグメントを含んでいてもかまわないが、これらの直線セグメントは、3 つ同一線上のポイントで定義する。
次の例は、有効な CircularString インスタンスを示しています。
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();
CircularString インスタンスでは、完全な円を定義するためには、少なくとも 2 つの円弧セグメントを含める必要があります。 CircularString インスタンスでは、(1 1, 3 1, 1 1) など 1 つの円弧セグメントを使用して完全な円を定義することはできません。 (1 1, 2 2, 3 1, 2 0, 1 1) を使用して円を定義してください。
次の例は、無効な CircularString インスタンスを示しています。
DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';
SELECT @g1.STIsValid(), @g2.STIsValid();
同一線上のポイントを持つインスタンス
次の場合、円弧セグメントは直線セグメントとして扱われます。
3 つのすべてのポイントが同一直線上にある場合 (例: (1 3, 4 4, 7 5))。
最初のポイントと中間のポイントは同一だが、3 番目のポイントが異なる場合 (例: (1 3, 1 3, 7 5))。
中間のポイントと最後のポイントは同一だが、最初のポイントが異なる場合 (例: (1 3, 4 4, 4 4))。
使用例
A. 空の CircularString を使用して geometry インスタンスをインスタンス化する
次の例は、空の CircularString インスタンスを作成する方法を示しています。
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. 1 つの CircularString を含む CircularString を使用して geometry インスタンスをインスタンス化する
次の例は、1 つの円弧のセグメント (半円) を持つ CircularStringインスタンスを作成する方法を示しています。
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. 複数の円弧セグメントを含む CircularString を使用して geometry インスタンスをインスタンス化する
次の例は、1 つ以上の円弧のセグメント (完全な円) を持つ CircularString インスタンスを作成する方法を示しています。
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));
結果は、次のようになります。
Circumference = 6.28319
CircularString の代わりに LineString が使用される場合は出力結果を比較してください。
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));
結果は、次のようになります。
Perimeter = 5.65685
CircularString の例の値は、円の実際の円周である 2∏ に近いことに注意してください。
D. CircularString を同じステートメント内で使用して geometry インスタンスを宣言およびインスタンス化する
このコード スニペットは、CircularString を同じステートメント内で使用して geometry インスタンスを宣言およびインスタンス化する方法を示しています。
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E. CircularString を使用して geometry インスタンスをインスタンス化する
次の例は、CircularString を使用して geography インスタンスを宣言およびインスタンス化する方法を示しています。
DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';
F. 直線の CircularString を使用して geometry インスタンスをインスタンス化する
次の例は、直線の CircularString インスタンスを作成する方法を示しています。
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
関連項目
参照
STPointOnSurface (geometry データ型)