CircularString
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
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 執行個體必須是空的或具有下列屬性:
- 它至少必須包含一個圓弧弧線 (亦即,至少有三個點)。
- 序列中每個圓弧線段的最後一個端點 (最後一個線段除外) 必須是序列中下一個線段的第一個端點。
- 它必須有奇數點。
- 它本身不得在間隔上重疊。
- 雖然 CircularString 執行個體可包含直線線段,不過這些線段必須由三個共線點定義。
下列範例會顯示有效的 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 執行個體至少必須包含兩個圓弧線段,才能定義完整的圓形。 CircularString 執行個體無法使用單一圓弧線段 (例如 (1 1, 3 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();
具有共線點的執行個體
在下列情況中,圓弧線段會被視為直線線段:
- 當三個點都是共線 (例如 (1 3, 4 4, 7 5)) 時。
- 當第一個和中間點相同,但是第三個點不同 (例如 (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. 使用 CircularString 搭配一個圓弧線段來具現化 Geometry 執行個體
下列範例會示範如何建立具有單一圓弧線段 (半圓形) 的 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
當您使用 LineString 而非 CircularString時,請比較輸出:
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);
另請參閱
空間資料類型概觀
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