Partilhar via


LineString

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Um LineString é um objeto unidimensional que representa uma sequência de pontos e os segmentos de linha que os conectam nos dados espaciais do Mecanismo de Banco de Dados SQL.

Instâncias de LineString

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

Diagrama de exemplos de instâncias de geometria LineString.

Como mostra a ilustração:

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

  • A Figura 2 é uma ocorrência de LineString não simples e não fechada.

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

  • A Figura 4 é uma ocorrência de LineString fechada e não simples e, portanto, não é um anel.

Instâncias aceitadas

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

A seguinte instância de LineString não é aceita. Ele lança um System.FormatException.

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

Instâncias válidas

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

  1. A instância de LineString deve ser aceita.
  2. Se uma ocorrência de LineString não estiver vazia, ela deverá conter pelo menos dois pontos distintos.
  3. A ocorrência de LineString não pode se sobrepor em um intervalo de dois ou mais pontos consecutivos.

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

Warning

A deteção de sobreposições LineString é baseada em cálculos de ponto flutuante, que não são exatos.

Examples

Exemplo A.

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);  

Exemplo B.

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 anterior. M e Z podem ser NULL valores.

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

Exemplo C.

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. Uma chamada para MakeValid converte a ocorrência de 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  

Aqui está o conjunto de resultados.

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