Partilhar via


LineString

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

Instâncias de LineString

A ilustração abaixo mostra exemplos de casos de LineString.

Exemplos de instâncias de geometria LineString

Conforme mostrado na ilustração:

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

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

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

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

Instâncias aceitas

As instâncias aceitas LineString podem ser inseridas em uma variável de geometria, mas podem não ser instâncias válidas LineString . Os critérios a seguir devem ser atendidos para que uma LineString instância seja aceita. A instância deve ser formada de pelo menos dois pontos ou deve estar vazia. As instâncias de 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 LineString instância pode ser aceita, mas não é válida.

A instância a seguir LineString não é aceita. Ele vai lançar um System.FormatException.

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

Instâncias válidas

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

  1. A LineString instância deve ser aceita.

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

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

As seguintes instâncias LineString 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 seguintes instâncias LineString 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();

Aviso

A detecção de LineString sobreposições baseia-se em cálculos de ponto flutuante, que não são exatos.

Exemplos

O exemplo a seguir mostra como criar uma geometry``LineString instância 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 LineString instância pode conter valores Z (elevação) e M (medida). Este exemplo adiciona valores M à LineString instância 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 geometry LineString instância 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

O snippet de código acima retornará o seguinte:

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

Consulte Também

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)Dados espaciais (SQL Server)