МультиЛайнСтринг

A MultiLineString — это коллекция из нуля или более geometry или экземпляров geographyLineString.

Экземпляры 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. Ни два LineString экземпляра, входящих в состав MultiLineString экземпляра, не могут пересекаться в любом интервале. Экземпляры 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 (тип данных geometry)
STIsClosed (тип данных geometry)
LineString
Пространственные данные (SQL Server)