LineString
适用于:Microsoft Fabric Microsoft Fabric SQL 数据库中Microsoft Fabric Warehouse 中的 SQL Server Azure SQL 数据库 Azure SQL 托管实例 SQL 分析终结点
LineString 是一维对象,表示一系列点,并在SQL 数据库引擎空间数据中连接这些点的线段。
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 实例才是有效的。
- 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 实例无效。 将 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.