次の方法で共有


サーキュラー ストリング

CircularStringは、0 個以上の連続する円弧セグメントのコレクションです。 円弧セグメントは、2 次元平面内の 3 点によって定義される曲線セグメントです。最初の点を 3 番目の点と同じにすることはできません。 円弧セグメントの 3 つの点がすべて同一直線上にある場合、円弧セグメントは線分として扱われます。

重要

CircularString サブタイプなど、SQL Server 2012 で導入された新しい空間機能の詳細な説明と例については、ホワイト ペーパー「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 1、3 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. CircularString を用いて、1 つの円弧を含む円弧セグメントによって Geometry インスタンスを生成する

次の例は、1 つの円弧セグメント (半円) を持つ CircularString インスタンスを作成する方法を示しています。

DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();

C. 複数の円弧セグメントを持つ CircularString を使用して Geometry インスタンスをインスタンス化する

次の例は、複数の円弧セグメント (完全な円) を持つ 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π (2 * pi) に近いことがわかります。

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 を用いた Geography インスタンスの作成

次の例は、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);

こちらもご覧ください

空間データ型の概要CompoundCurveMakeValid (geography データ型)MakeValid (geometry データ型)STIsValid (geometry データ型)STIsValid (geography データ型)STLength (geometry データ型)STStartPoint (geometry データ型)STEndpoint (geometry データ型)STPointN (geometry データ型)STNumPoints (geometry データ型)STIsRing (geometry データ型)STIsClosed (geometry データ型)STPointOnSurface (geometry データ型)LineString