共用方式為


LineString

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

LineString 是一維物件,代表一連串的點,以及連接它們 SQL 資料庫 引擎空間數據中的線段。

LineString 實例

下圖顯示LineString實例的範例。

geometry LineString 實例範例的圖表。

如本圖所示:

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

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

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

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

已接受的執行個體

接受的 LineString 實例可以輸入至幾何變數,但它們可能不是有效的 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 實例無效。 將 LineString 實例轉換成 Point呼叫MakeValid

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.