MultiLineString
Uma MultiLineString é uma coleção de zero ou mais instâncias de geometry ou de geographyLineString.
Instâncias MultiLineString
A ilustração a seguir mostra exemplos de instâncias MultiLineString.
Conforme mostrado na ilustração:
A Figura 1 é uma instância MultiLineString simples cujo limite são os quatro pontos de extremidade de seus dois elementos LineString.
A Figura 2 é uma instância MultiLineString simples porque apenas os pontos de extremidade da interseção de elementos LineString se cruzam. O limite são os dois pontos de extremidade que não se sobrepõem.
A Figura 3 é uma instância MultiLineString não simples porque apenas o interior de um de seus elementos LineString se cruzam. O limite dessa instância MultiLineString são os quatro pontos de extremidade.
A Figura 4 é uma instância MultiLineString não simples, não fechada.
A Figura 5 é uma instância MultiLineString simples, não fechada. Ela não é fechada porque seus elementos LineStrings não estão fechados. Ela é simples porque nenhum dos interiores de qualquer uma das instâncias LineStrings se cruzam.
A Figura 6 é uma instância MultiLineString simples e fechada. Ela é fechada porque todos os seus elementos não estão fechados. Ela é simples porque nenhum de seus elementos se cruzam nos interiores.
Instâncias aceitas
Para uma instância MultiLineString ser aceita, ela deve estar vazia ou conter apenas instâncias LineString aceitas. Para obter mais informações sobre instâncias LineString aceitas, consulte LineString. Veja a seguir exemplos de instâncias MultiLineString aceitas.
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))';
O exemplo a seguir gera um System.FormatException porque a segunda instância LineString não é válida.
DECLARE @g geometry = 'MULTILINESTRING((1 1, 3 5),(-5 3))';
Instâncias válidas
Para que uma instância MultiLineString seja válida, ela deve atender aos seguintes critérios:
Todas as instâncias que integram a instância MultiLineString precisam ser instâncias LineString válidas.
Não deve haver sobreposição de duas instâncias LineString que integrem a instância MultiLineString em um intervalo. As instâncias LineString podem se cruzar ou cruzar outras instâncias LineString em um número limitado de pontos.
O exemplo a seguir mostra três instâncias MultiLineString válidas e uma instância MultiLineString que não é válida.
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 não é válido porque a segunda instância LineString sobrepõe a primeira instância LineString em um intervalo. Elas se tocam em um número ilimitado de pontos.
Exemplos
O exemplo a seguir cria uma instância simples de geometryMultiLineString que contém dois elementos LineString com o SRID 0.
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');
Para instanciar essa instância com um SRID diferente, use STGeomFromText() ou STMLineStringFromText(). Também é possível usar Parse() e, em seguida, modificar o SRID, conforme mostrado no exemplo a seguir.
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 2, 1 1), (1 0, 1 1))');
SET @g.STSrid = 13;