Compartilhar via


LineString

Um LineString é um objeto unidimensional que representa uma sequência de pontos e os segmentos de linha que os conectam.

Instâncias LineString

A ilustração a seguir mostra exemplos de instâncias LineString.

Exemplos de instâncias de geometria LineString

Conforme mostrado na ilustração:

  • A Figura 1 é uma instância LineString simples, não fechada.

  • A Figura 2 é uma instância LineString não simples, não fechada.

  • A Figura 3 é uma instância LineString fechada, simples e portanto é um anel.

  • A Figura 4 é uma instância LineString fechada, não simples e, portanto, não é um anel.

Instâncias aceitas

Instâncias LineString aceitas podem ser inseridas em uma variável geometry, mas talvez não sejam instâncias LineString válidas. Os critérios a seguir devem ser atendidos para uma instância LineString ser aceita. A instância deve ser constituída de pelo menos dois pontos ou deve estar vazia. As instâncias LineString a seguir são aceitas.

DECLARE @g1 geometry = 'LINESTRING EMPTY';
DECLARE @g2 geometry = 'LINESTRING(1 1,2 3,4 8, -6 3)';
DECLARE @g3 geometry = 'LINESTRING(1 1, 1 1)';

@g3 mostra que uma instância LineString pode ser aceita, mas talvez não seja válida.

A instância LineString a seguir não é aceita. Ela gerará um System.FormatException.

DECLARE @g geometry = 'LINESTRING(1 1)';

Instâncias válidas

Para que uma instância LineString seja válida, ela deve atender aos critérios a seguir.

  1. A instância LineString deve ser aceita.

  2. Se uma instância LineString não for estiver vazia, ela deverá conter pelo menos dois pontos distintos.

  3. A instância LineString não pode se sobrepor em um intervalo.

As instâncias LineString a seguir são válidas.

DECLARE @g1 geometry= 'LINESTRING EMPTY';
DECLARE @g2 geometry= 'LINESTRING(1 1, 3 3)';
DECLARE @g3 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0)';
DECLARE @g4 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();

As instâncias LineString a seguir não são válidas.

DECLARE @g1 geometry = 'LINESTRING(1 4, 3 4, 2 4, 2 0)';
DECLARE @g2 geometry = 'LINESTRING(1 1, 1 1)';
SELECT @g1.STIsValid(), @g2.STIsValid();
Observação sobre cuidadosCuidado

A detecção de sobreposições de LineString se baseia em cálculos de pontos flutuantes que não são exatos.

Exemplos

O exemplo a seguir mostra como criar uma instância geometryLineString com três pontos e um SRID de 0:

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);

Cada ponto na instância LineString pode conter valores Z (elevação) e M (medida). Este exemplo adiciona valores M à instância LineString criada no exemplo acima. M e Z podem ser valores nulos.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(1 1 NULL 0, 2 4 NULL 12.3, 3 9 NULL 24.5)', 0);