LineString

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 实例有效,该实例必须满足以下条件。

  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 重叠的检测基于浮点计算,这些计算是不精确的。

示例

下面的示例说明如何创建一个包含三个点且 SRID 为 0 的 geometryLineString 实例:

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);

此 LineString 实例中的每个点都可以包含 Z(仰角)和 M(度量)值。下面这个示例向上例中创建的 LineString 实例添加了 M 值。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);