CurvePolygon
は、外部境界リングと 0 個以上の内部リングによって定義されるトポロジ的に閉じたサーフェスです。
重要
CurvePolygon
サブタイプなど、SQL Server 2012 で導入された空間機能の詳細な説明と例については、ホワイト ペーパー「SQL Server 2012 の新しい空間機能」をダウンロードしてください。
次の条件は、 CurvePolygon
インスタンスの属性を定義します。
CurvePolygon
インスタンスの境界は、外部リングとすべての内部リングによって定義されます。CurvePolygon
インスタンスの内部は、外部リングとすべての内部リングの間のスペースです。
CurvePolygon
インスタンスは、CurvePolygon
インスタンスに次の円弧セグメント (CircularString
とCompoundCurve
) を含めるという点で、Polygon
インスタンスとは異なります。
CompoundCurve インスタンス
次の図は、有効な CurvePolygon
図を示しています。
受け入れられたインスタンス
CurvePolygon
インスタンスを受け入れるには、空であるか、受け入れられる円弧リングのみが含まれている必要があります。 許容される円弧リングは、次の要件を満たしています。
受け入れ可能な
LineString
、CircularString
、またはCompoundCurve
インスタンスです。 受け入れられるインスタンスの詳細については、「 LineString、 CircularString、 および CompoundCurve」を参照してください。少なくとも 4 つのポイントがあります。
始点と終点は、同じ X 座標と Y 座標を持ちます。
注
Z 値と M 値は無視されます。
次の例は、受け入れられた CurvePolygon
インスタンスを示しています。
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';
@g3
は、Z 値が無視されるため、始点と終点の Z 値が異なる場合でも受け入れられます。
@g5
は、 geography
型インスタンスが無効であっても受け入れられます。
次の例では、 System.FormatException
をスローします。
DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';
@g1
は、始点と終点が同じ Y 値を持たないため、使用できません。
@g2
は、リングに十分なポイントがないため、受け入れできません。
有効なインスタンス
CurvePolygon
インスタンスが外部リングと内部リングの両方を有効にするには、次の条件を満たす必要があります。
これらは、単一の接線点でのみ触れることがあります。
互いに交差することはできません。
各リングには、少なくとも 4 つのポイントが含まれている必要があります。
各リングは、許容される曲線の種類である必要があります。
CurvePolygon
インスタンスは、データ型が geometry
か geography
かに応じて、特定の条件を満たす必要もあります。
ジオメトリデータ型
有効な geometryCurvePolygon インスタンスには、次の属性が必要です。
すべての内部リングは、外部リング内に含まれている必要があります。
複数の内部リングがある場合がありますが、1 つの内部リングに別の内部リングを含めることはできません。
リングがそれ自体または別のリングと交差することはできません。
リングは、単一の接線ポイントでのみタッチできます (リングがタッチする必要があるポイントの数は有限である必要があります)。
ポリゴンの内部は接続されている必要があります。
次の例は、有効な geometryCurvePolygon インスタンスを示しています。
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
SELECT @g1.STIsValid(), @g2.STIsValid();
CurvePolygon インスタンスには Polygon インスタンスと同じ有効性ルールがあります。ただし、CurvePolygon インスタンスは新しい円弧セグメント タイプを受け入れる場合があります。 有効または無効なインスタンスのその他の例については、「 Polygon」を参照してください。
地理データ型
有効な geographyCurvePolygon インスタンスには、次の属性が必要です。
ポリゴンの内部は、左側のルールを使用して接続されます。
リングがそれ自体または別のリングと交差することはできません。
リングは、単一の接線ポイントでのみタッチできます (リングがタッチする必要があるポイントの数は有限である必要があります)。
ポリゴンの内部は接続されている必要があります。
次の例は、有効な geography CurvePolygon インスタンスを示しています。
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
例示
ある。 空の CurvePolygon を使用して Geometry インスタンスをインスタンス化する
この例では、空の CurvePolygon
インスタンスを作成する方法を示します。
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. CurvePolygon を使用してジオメトリ インスタンスを同じ文で宣言およびインスタンス化する
次のコード スニペットは、同じステートメントで CurvePolygon
を使用して geometry インスタンスを宣言および初期化する方法を示しています。
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. CurvePolygon を使用して Geography インスタンスをインスタンス化する
このコード スニペットは、CurvePolygon
を使用してgeography
インスタンスを宣言および初期化する方法を示しています。
DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. 外部境界リングのみを使用して CurvePolygon を格納する
この例では、 CurvePolygon
インスタンスに単純な円を格納する方法を示します (外部境界リングのみを使用して円を定義します)。
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
E. 内部リングを含むCurvePolygonを保存する
次の使用例は、 CurvePolygon
インスタンスにドーナツを作成します (外部境界リングと内部リングの両方を使用してドーナツを定義します)。
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
この例では、内部リングを使用する場合の有効な CurvePolygon
インスタンスと無効なインスタンスの両方を示します。
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');
IF @g1.STIsValid() = 1
BEGIN
SELECT @g1.STArea();
END
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');
IF @g2.STIsValid() = 1
BEGIN
SELECT @g2.STArea();
END
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;
@g1と@g2はどちらも同じ外部境界リングを使用します。半径が 5 の円で、両方とも内部リングに正方形を使用します。 ただし、インスタンス @g1 は有効ですが、インスタンス @g2 は無効です。 @g2が無効な理由は、内部リングが外部リングによって囲まれた内部空間を 4 つの別個の領域に分割することです。 次の図は、発生した内容を示しています。
こちらもご覧ください
多角形
CircularString
CompoundCurve
ジオメトリ データ型 メソッドのリファレンス
geography データ型メソッド リファレンス
空間データ型の概要