次の方法で共有


CircularString

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス Microsoft Fabric のSQL データベース

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 を使用して Geometry インスタンスをインスタンス化する

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

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

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

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