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
.
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.
A instância
LineString
deve ser aceita.Se uma instância
LineString
não for vazia, ela deverá conter pelo menos dois pontos distintos.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
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);
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 snippets 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
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)