適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 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();
Warning
LineString 重疊的偵測是以浮點計算為基礎,但這些計算並不精確。
Examples
範例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 實例無效。 將 LineStringMakeValidPoint 的呼叫。
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.