LineString
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
LineString 是代表一連串的點及連線這些點之線段的一維物件。
LineString 執行個體
下圖顯示 LineString 執行個體的範例。
如本圖所示:
圖 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 執行個體必須符合下列準則,才會是有效的。
- 系統必須接受 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 執行個體無效,而 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)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應