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 das instâncias LineString de geometria

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, por isso, não é um anel.

Instâncias aceitas

As instâncias LineString aceitas podem ser inseridas em uma variável geometry, mas talvez não sejam instâncias LineString válidas. Os seguintes critérios devem ser atendidos para que uma instância LineString seja aceita. A instância deve ser formada por 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 não válida.

A instância LineString a seguir não é aceita. Ela irá 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 seguintes critérios.

  1. A instância LineString deve ser aceita.

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

  3. A instância LineString não pode se sobrepor sobre um intervalo de dois ou mais pontos consecutivos.

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 baseia-se em cálculos de pontos flutuantes, os quais não são exatos.

Exemplos

O exemplo a seguir mostra como criar uma instância LineString de geometry 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). Esse exemplo adiciona valores de 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);

O exemplo a seguir mostra como criar uma instância geometry LineString com dois pontos iguais. Uma chamada para IsValid indica que a instância LineString não é válida e uma chamada para MakeValid converterá a instância LineString em um Point.

DECLARE @g geometry
SET @g = geometry::STGeomFromText('LINESTRING(1 3, 1 3)',0);
IF @g.STIsValid() = 1
  BEGIN
     SELECT @g.ToString() + ' is a valid LineString.';  
  END
ELSE
  BEGIN
     SELECT @g.ToString() + ' is not a valid LineString.';
     SET @g = @g.MakeValid();
     SELECT @g.ToString() + ' is a valid Point.';  
  END

Os trechos de código acima irão retornar o seguinte:

LINESTRING(1 3, 1 3) is not a valid LineString
POINT(1 3) is a valid Point.

Consulte também

Referência

STLength (tipo de dados geometry)

STStartPoint (tipo de dados geometry)

STEndpoint (tipo de dados geometry)

STPointN (tipo de dados geometry)

STNumPoints (tipo de dados geometry)

STIsRing (tipo de dados geometry)

STIsClosed (tipo de dados geometry)

STPointOnSurface (tipo de dados geometry)

Conceitos

Dados espaciais (SQL Server)