Поделиться через


MultiLineString

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)