A 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
检测基于浮点计算,而浮点计算本身并不精确。
例子
以下示例演示如何创建一个 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)