线串

A LineString 是一维对象,表示一系列点和连接它们的线段。

LineString 实例

下图展示了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要使实例有效,它必须满足以下条件。

  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 检测基于浮点计算,而浮点计算本身并不精确。

例子

以下示例演示如何创建一个 geometry``LineString 实例,该实例的三个点和一个 SRID 为 0:

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);

以下示例演示如何创建具有两个 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 Data Type)STStartPoint (geometry Data Type)STEndpoint (geometry Data Type)STPointN (geometry Data Type)STNumPoints (geometry Data Type)STIsRing (geometry Data Type)STIsClosed (geometry Data Type)STPointOnSurface (geometry Data Type)Spatial Data (SQL Server)