CircularString
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric SQL Database Microsoft網状架構倉儲中的 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