CircularString

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

CircularString インスタンス

次の図は有効な 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 インスタンスをインスタンス化する

次の例は、複数の円弧のセグメント (完全な円) を持つ 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);  

参照

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