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
实例才是有效的。
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 的 geometry``LineString
实例:
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);
下面的示例说明如何创建一个包含两个相同点的 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 数据类型) STStartPoint (geometry 数据类型) STEndpoint (geometry 数据类型) STPointN (geometry 数据类型) STNumPoints () stNumPoints geometry Data Type) STIsRing (geometry Data Type) STIsClosed (geometry Data Type) STPointOnSurface (geometry Data Type) Spatial Data (SQL Server)