適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 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)) 時。
Examples
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