共用方式為


圓弧字符串

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

這很重要

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

CircularString 實例

下圖顯示有效的 CircularString 實例:

已接受的執行個體

如果CircularString實例是空的,或者包含奇數個點,則接受該實例,其中 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 1, 2 2, 3 1, 2 0, 1 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。 使用空白圓形字符串實例化 Geometry 實例

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

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

B. 透過使用 CircularString 及一個圓弧線段來具現化幾何實例

下列範例示範如何使用 CircularString 單一圓弧線段建立實例(半圓形):

DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();

C. 使用圓弧字串搭配多個圓弧線段來實例化幾何實例

下列範例示範如何建立 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π (2 * pi),這是圓形的實際周長。

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

此代碼段示範如何在同一個語句中宣告並實例化具有CircularStringgeometry實例。

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 的實例:

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

另請參閱

空間數據類型概論CompoundCurveMakeValid(geography 數據類型)MakeValid(geometry 數據類型)STIsValid(geometry 數據類型)STIsValid(geography 數據類型)STLength(geometry 數據類型)STStartPoint(geometry 數據類型)STEndpoint(geometry 數據類型)STPointN(geometry 數據類型)STNumPoints(geometry 數據類型)STIsRing(geometry 數據類型)STIsClosed(geometry 數據類型)STPointOnSurface(geometry 數據類型)LineString