MultiLineString
MultiLineString представляет собой коллекцию экземпляров geometry или geographyLineString.
Экземпляры 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 был действителен, он должен соответствовать следующим критериям.
Все экземпляры, составляющие экземпляр MultiLineString, должны быть действительными экземплярами LineString.
Никакие два экземпляра 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 на интервале. Они соприкасаются в бесконечном количестве точек.
Примеры
В следующем примере создается простой экземпляр geometryMultiLineString, в котором содержатся два элемента 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)