共用方式為


CurvePolygon

CurvePolygon是由外部環形邊界和零個或多個內部環定義的拓撲封閉表面

這很重要

如需 SQL Server 2012 中介紹之空間功能的詳細描述和範例,包括 CurvePolygon 子類型,請下載白皮書 SQL Server 2012 中的新空間功能

下列準則會定義CurvePolygon 實例的屬性:

  • 實例的 CurvePolygon 界限是由外部環形和所有內部環形所定義。

  • 實例的內部 CurvePolygon 是外部環形與所有內部環形之間的空間。

CurvePolygon 實例與 Polygon 實例不同之處在於 CurvePolygon 實例可能包含以下的圓弧線段:CircularStringCompoundCurve

CompoundCurve 執行個體

下圖顯示有效的 CurvePolygon 圖形:

已接受的執行個體

要接受CurvePolygon範例,其需要是空的或只包含已接受的圓弧環形。 接受的圓弧環形符合下列需求。

  1. 這是可接受的 LineStringCircularStringCompoundCurve 實例。 如需已接受實例的詳細資訊,請參閱 LineStringCircularStringCompoundCurve

  2. 至少有四分。

  3. 起點和終點具有相同的 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 實例同時有效,外部和內部環形必須符合下列準則:

  1. 它們只能觸及單一正切點。

  2. 他們不能互相交錯。

  3. 每個環形至少必須包含四個點。

  4. 每個環形都必須是可接受的曲線類型。

CurvePolygon 實例也必須根據實例是否為 geometrygeography 數據類型,符合特定準則。

Geometry 資料類型

有效的 geometryCurvePolygon 實例必須具有下列屬性:

  1. 所有內部環都必須包含在外部環內。

  2. 可能有多個內部環形,但內部環形不能包含另一個內部環形。

  3. 沒有環可以交叉自身或另一個環。

  4. 環只能在單一切點接觸(環的接觸點數必須是有限的)。

  5. 多邊形的內部必須連通。

下列範例顯示有效的 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 實例必須具有下列屬性:

  1. 多邊形的內部會使用左側規則連接。

  2. 沒有環形可以交叉本身或另一個環形。

  3. 圓環只能在單一切線點相觸(圓環相觸的點數必須是有限的)。

  4. 多邊形的內部必須相連。

下列範例顯示有效的 geography CurvePolygon 實例。

DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';  
SELECT @g.STIsValid();  

範例

A。 使用空的 CurvePolygon 實例化幾何實例

此範例示範如何建立空 CurvePolygon 的實例:

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');  

B. 在相同語句中使用 CurvePolygon 宣告和具現化 Geometry 實例

此代碼段示範如何在相同的語句中使用CurvePolygon來宣告和初始化一個幾何實例。

DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'  

C. 使用 CurvePolygon 具現化 Geography 實例

此程式碼片段示範如何宣告並初始化一個使用 CurvePolygongeography 實例:

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中(僅使用外圍界定環來定義圓形):

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 內部環形會將外部環形所限定的內部空間分割成四個不同的區域。 下列繪圖顯示發生什麼事:

另請參閱

多邊形
CircularString
CompoundCurve
geometry 資料類型方法指南
地理資料類型方法參考
空間資料類型概觀