LineString
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 重疊的偵測是以浮點計算為基礎,但是這種計算並不精確。 |
範例
下列範例示範如何建立具有三個點且 SRID 為 0 的 geometryLineString 執行個體:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);
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);