CircularString
適用対象: SQL Server
Azure SQL データベース
Azure SQL Managed Instance
CircularString は、0 個以上の連続する円弧セグメントのコレクションです。 円弧セグメントは、2 次元平面内の 3 つの点によって定義された曲線セグメントです。最初のポイントを 3 番目のポイントと同じにすることはできません。 円弧セグメントの 3 つのポイントすべてが同一線上にある場合は、円弧セグメントが直線セグメントとして扱われます。
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