Partilhar via


LineString

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Ponto de extremidade de análise SQL no Microsoft Fabric Warehouse 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 .

Imagens de exemplos de instâncias de geometry 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

As instâncias de LineString aceitas podem ser inseridas em uma variável de geometria, mas podem não ser instâncias de 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 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. Ele lança 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 estiver 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();  

Aviso

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

Exemplos

Exemplo A.

O exemplo a seguir mostra como criar uma instância geometry LineString com três pontos e uma 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 instância geometry LineString com dois pontos iguais. Uma chamada para IsValid indica que a instância LineString não é válida. Uma chamada para MakeValid converter a instâ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  

Veja a seguir o conjunto de resultados.

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