多线字符串

A MultiLineString 是零个或多个 geometrygeographyLineString 实例的集合。

MultiLineString 实例

下图展示了MultiLineString实例的例子。

几何图形 MultiLineString 实例的示例:

如下图所示:

  • 图 1 是一个简单的MultiLineString实例,其边界是其两个LineString元素的四个终结点。

  • 图 2 是一个简单的 MultiLineString 实例,因为只有LineString 元素的端点相交。 边界是两个不重叠的终结点。

  • 图 3 是一个非简单的 MultiLineString 实例,因为其中一个 LineString 元素的内部被交叉。 此 MultiLineString 实例的边界是四个终结点。

  • 图 4 是非简单的非封闭 MultiLineString 实例。

  • 图 5 是一个简单的非封闭 MultiLineString。 它未关闭,因为其中的 LineStrings 元素未关闭。 这很简单,因为任何 LineStrings 实例的内部都不存在相交。

  • 图 6 是一个简单的封闭 MultiLineString 实例。 它已经关闭了,因为它的所有元素都是关闭状态。 它很简单,因为它的元素在内部没有相交。

接受的实例

对于 MultiLineString 实例被接受,它必须是空的,或者只包含接受的 LineString 实例。 有关接受 LineString 的实例的详细信息,请参阅 LineString。 下面是接受 MultiLineString 的实例的示例。

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';  
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';  
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';  
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';  

下面的示例引发一个System.FormatException,因为第二个LineString实例无效。

DECLARE @g geometry = 'MULTILINESTRING((1 1, 3 5),(-5 3))';  

有效实例

MultiLineString要使实例有效,它必须满足以下条件:

  1. 构成 MultiLineString 该实例的所有实例必须是有效的 LineString 实例。

  2. 组成MultiLineString实例的任意两个LineString实例在某一时间间隔内不能重叠。 这些 LineString 实例只能在有限的点数处相交或触摸自己或其他 LineString 实例。

以下示例显示了三个有效 MultiLineString 实例和一个 MultiLineString 无效实例。

DECLARE @g1 geometry = 'MULTILINESTRING EMPTY';  
DECLARE @g2 geometry = 'MULTILINESTRING((1 1, 3 5), (-5 3, -8 -2))';  
DECLARE @g3 geometry = 'MULTILINESTRING((1 1, 5 5), (1 3, 3 1))';  
DECLARE @g4 geometry = 'MULTILINESTRING((1 1, 3 3, 5 5),(3 3, 5 5, 7 7))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();  

@g4 无效,因为第二 LineString 个实例以间隔重叠第一 LineString 个实例。 他们触摸到无限数量的点。

例子

以下示例创建一个简单 geometry``MultiLineString 实例,其中包含两 LineString 个具有 SRID 0 的元素。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');  

若要使用不同的 SRID 实例化此实例,请使用 STGeomFromText()STMLineStringFromText()。 还可以使用 Parse() 和修改 SRID,如以下示例所示。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');  
SET @g.STSrid = 13;  

另请参阅

STLength (几何数据类型)
STIsClosed (几何数据类型)
LineString
空间数据(SQL Server)