共用方式為


CircularString

適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric SQL Database Microsoft網状架構倉儲中的 SQL 分析端點

CircularString 是零個或多個連續圓弧線段的集合。 圓弧線段是指由二維平面中三個點所定義的弧形線段。第一個點不得與第三個點相同。 如果圓弧線段的三個點都是共線,此圓弧線段就會被視為直線線段。

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);