LineString

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

LineString 是代表一連串的點及連線這些點之線段的一維物件。

LineString 執行個體

下圖顯示 LineString 執行個體的範例。

Examples of geometry LineString instances

如本圖所示:

  • 圖 1 是簡單、非封閉的 LineString 執行個體。

  • 圖 2 是非簡單、非封閉的 LineString 執行個體。

  • 圖 3 是簡單、封閉的 LineString 執行個體,因此它是環形。

  • 圖 4 是非簡單、封閉的 LineString 執行個體,因此它不是環形。

已接受的執行個體

您可以將已接受的 LineString 執行個體放入 geometry 變數中,但是它們可能不是有效的 LineString 執行個體。 若要讓系統接受 LineString 執行個體,就必須符合下列準則。 此執行個體至少必須由兩個點所組成,或者它必須是空的。 下面是已接受的 LineString 執行個體。

DECLARE @g1 geometry = 'LINESTRING EMPTY';  
DECLARE @g2 geometry = 'LINESTRING(1 1,2 3,4 8, -6 3)';  
DECLARE @g3 geometry = 'LINESTRING(1 1, 1 1)';  

@g3 顯示 LineString 執行個體可被系統接受但卻無效。

下面是無法接受的 LineString 執行個體。 它將擲回 System.FormatException

DECLARE @g geometry = 'LINESTRING(1 1)';  

有效的執行個體

LineString 執行個體必須符合下列準則,才會是有效的。

  1. 系統必須接受 LineString 執行個體。
  2. 如果 LineString 執行個體不是空的,則其至少必須包含兩個相異點。
  3. LineString 執行個體本身不得在兩個或多個連續點的間隔上重疊。

下面是有效的 LineString 執行個體。

DECLARE @g1 geometry= 'LINESTRING EMPTY';  
DECLARE @g2 geometry= 'LINESTRING(1 1, 3 3)';  
DECLARE @g3 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0)';  
DECLARE @g4 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0, 1 1)';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();  

下面是無效的 LineString 執行個體。

DECLARE @g1 geometry = 'LINESTRING(1 4, 3 4, 2 4, 2 0)';  
DECLARE @g2 geometry = 'LINESTRING(1 1, 1 1)';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

警告

LineString 重疊的偵測是以浮點計算為基礎,但這些計算並不精確。

範例

範例 A。

下列範例示範如何建立具有三個點且 SRID 為 0 的 geometry``LineString 執行個體:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);  

範例 B.

LineString 執行個體中的每個點都可包含 Z (高度) 和 M (測量) 值。 此範例會將 M 值加入到上述範例所建立的 LineString 執行個體。 M 和 Z 可以是 null 值。

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(1 1 NULL 0, 2 4 NULL 12.3, 3 9 NULL 24.5)', 0);  

範例 C。

下列範例會示範如何建立具有兩個相同點的 geometry LineString 執行個體。 IsValid 的呼叫表示 LineString 執行個體無效,而 MakeValid 的呼叫會將 LineString 執行個體轉換成 Point

DECLARE @g geometry  
SET @g = geometry::STGeomFromText('LINESTRING(1 3, 1 3)',0);  
IF @g.STIsValid() = 1  
  BEGIN  
     SELECT @g.ToString() + ' is a valid LineString.';    
  END  
ELSE  
  BEGIN  
     SELECT @g.ToString() + ' is not a valid LineString.';  
     SET @g = @g.MakeValid();  
     SELECT @g.ToString() + ' is a valid Point.';    
  END  

以下為結果集。

LINESTRING(1 3, 1 3) is not a valid LineString  
POINT(1 3) is a valid Point.  

另請參閱

STLength (geometry 資料類型)
STStartPoint (geometry 資料類型)
STEndpoint (geometry 資料類型)
STPointN (geometry 資料類型)
STNumPoints (geometry 資料類型)
STIsRing (geometry 資料類型)
STIsClosed (geometry 資料類型)
STPointOnSurface (geometry 資料類型)
空間資料 (SQL Server)