LineString

适用于:Microsoft Fabric Microsoft Fabric SQL 数据库中Microsoft Fabric Warehouse 中的 SQL Server Azure SQL 数据库 Azure SQL 托管实例 SQL 分析终结点

LineString 是一维对象,表示一系列点,并在SQL 数据库引擎空间数据中连接这些点的线段。

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

示例

示例 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 实例无效。 将 LineString 实例转换为 Point调用MakeValid

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.