LineString
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft 網狀架構倉儲中的 SQL 分析端點,Microsoft Fabric Microsoft Fabric SQL Database 中的 SQL 分析端點
LineString 是一維物件,代表一連串的點,以及連接它們 SQL 資料庫 引擎空間數據中的線段。
LineString 實例
下圖顯示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 執行個體必須符合下列準則,才會是有效的。
- 系統必須接受 LineString 執行個體。
- 如果 LineString 執行個體不是空的,則其至少必須包含兩個相異點。
- 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.